¿Cuál es la mejor manera de convertir Map<key,value>a a List<value>? Simplemente repita todos los valores e insértelos en una lista o ¿estoy pasando por alto algo?
¿Cuál es la mejor manera de convertir Map<key,value>a a List<value>? Simplemente repita todos los valores e insértelos en una lista o ¿estoy pasando por alto algo?
Respuestas:
List<Value> list = new ArrayList<Value>(map.values());
asumiendo:
Map<Key,Value> map;
Collectiona Listfuncionaría.
keySet()y values()generalmente son objetos de ajuste que proporcionan una vista de conjunto o colección de la estructura subyacente ( keySet()devuelve un conjunto para enfatizar que no hay engaños). Para values(), el objeto devuelto puede ser un List, pero a menudo no lo será. La creación de una Lista real, como usted dice, rompe el enlace, lo que significa que ya no depende del Mapa original. A veces sin embargo, sólo se necesita una lista debido a que algunos API requiere uno - el refuerzo de la regla de que una buena API debe requerir sólo las interfaces más abstractas que puede salirse con la suya ...
El problema aquí es que Maptiene dos valores (una clave y un valor), mientras que un Listsolo tiene un valor (un elemento).
Por lo tanto, lo mejor que se puede hacer es obtener una Listde las claves o los valores. (A menos que hagamos un contenedor para mantener el par clave / valor).
Digamos que tenemos un Map:
Map<String, String> m = new HashMap<String, String>();
m.put("Hello", "World");
m.put("Apple", "3.14");
m.put("Another", "Element");
Las claves como a Listse pueden obtener creando una nueva a ArrayListpartir de una Setdevuelta por el Map.keySetmétodo:
List<String> list = new ArrayList<String>(m.keySet());
Si bien los valores como a Listse pueden obtener creando uno nuevo a ArrayListpartir de un método Collectiondevuelto Map.values:
List<String> list = new ArrayList<String>(m.values());
El resultado de obtener las Listclaves:
manzana Otro Hola
El resultado de obtener los Listvalores de:
3.14 Elemento Mundo
HashMapclasificadas similares Mapserá efectivamente aleatorio.
Usando la API de Java 8 Streams.
List<Value> values = map.values().stream().collect(Collectors.toList());
una lista de que?
Asumiendo que mapes tu instancia deMap
map.values()devolverá un que Collectioncontiene todos los valores del mapa.map.keySet()devolverá un que Setcontenga todas las claves del mapa.Supongo que quieres convertir los valores contenidos en el Mapalist ? Lo más fácil es llamar al values()método de la Mapinterfaz. Esto devolverá los Collectionobjetos de valor contenidos en el Map.
Tenga en cuenta que esto Collectionestá respaldado por el Mapobjeto y cualquier cambio en el Mapobjeto se reflejará aquí. Entonces, si desea una copia separada no vinculada a su Mapobjeto, simplemente cree un nuevo Listobjeto como ArrayListpasar el valor Collectioncomo se muestra a continuación.
ArrayList<String> list = new ArrayList<String>(map.values());
Puedes hacerlo así
List<Value> list = new ArrayList<Value>(map.values());
Si desea asegurarse de que los valores en la resultante List<Value>están en el orden de las claves de la entrada Map<Key, Value>, debe "ir a través de" de SortedMapalguna manera.
O bien comenzar con una concreta SortedMapaplicación (tal como TreeMap) o inserte su entrada Mapen una SortedMapantes de la conversión que a List. p.ej:
Map<Key,Value> map;
List<Value> list = new ArrayList<Value>( new TreeMap<Key Value>( map ));
De lo contrario, obtendrá el orden nativo que Mapproporciona la implementación, que a menudo puede ser algo diferente al orden de las teclas naturales (Pruebe Hashtableo ConcurrentHashMap, para variar).
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("java", 20);
map.put("C++", 45);
Set <Entry<String, Integer>> set = map.entrySet();
List<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>(set);
podemos tener pares de clave y valor en la lista. También podemos obtener clave y valor usando Map.Entry iterando sobre la lista.
// you can use this
List<Value> list = new ArrayList<Value>(map.values());
// or you may use
List<Value> list = new ArrayList<Value>();
for (Map.Entry<String, String> entry : map.entrySet())
{
list.add(entry.getValue());
}
"Map<String , String > map = new HapshMap<String , String>;
map.add("one","java");
map.add("two" ,"spring");
Set<Entry<String,String>> set = map.entrySet();
List<Entry<String , String>> list = new ArrayList<Entry<String , String>> (set);
for(Entry<String , String> entry : list ) {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
} "
Aquí está el método genérico para obtener valores del mapa.
public static <T> List<T> ValueListFromMap(HashMap<String, T> map) {
List<T> thingList = new ArrayList<>();
for (Map.Entry<String, T> entry : map.entrySet()) {
thingList.add(entry.getValue());
}
return thingList;
}
HashMap<Integer, List<String>> map = new HashMap<>();
List<String> list = new ArrayList<String>();
list.add("Java");
list.add("Primefaces");
list.add("JSF");
map.put(1,list);
if(map != null){
return new ArrayList<String>((Collection<? extends String>) map.values());
}