¿Cómo convertir un mapa a la lista en Java?

¿Cuál es la mejor manera de convertir un Map en una List ? Simplemente itere sobre todos los valores e insértelos en una lista o ¿estoy pasando por alto algo?

 List list = new ArrayList(map.values()); 

asumiendo:

 Map map; 

El problema aquí es que Map tiene dos valores (una clave y un valor), mientras que una List solo tiene un valor (un elemento).

Por lo tanto, lo mejor que se puede hacer es obtener una List de las claves o los valores. (A menos que hagamos un envoltorio para aferrarnos al par clave / valor).

Digamos que tenemos un Map :

 Map m = new HashMap(); m.put("Hello", "World"); m.put("Apple", "3.14"); m.put("Another", "Element"); 

Las claves como una List se pueden obtener creando una nueva ArrayList desde un Set devuelto por el método Map.keySet :

 List list = new ArrayList(m.keySet()); 

Mientras que los valores como una List se pueden obtener creando una nueva ArrayList de una Collection devuelta por el método Map.values :

 List list = new ArrayList(m.values()); 

El resultado de obtener la List de claves:

 manzana
 Otro
 Hola

El resultado de obtener la List de valores:

 3.14
 Elemento
 Mundo

Usando Java 8 Streams API.

 List values = map.values().stream().collect(Collectors.toList()); 

una lista de qué?

Suponiendo que el map es tu instancia de Map

  • map.values() devolverá una Collection contiene todos los valores del mapa.
  • map.keySet() devolverá un Set contiene todas las claves del mapa.

map.entrySet() le proporciona una colección de objetos Map.Entry que contienen tanto clave como valor. puede transformar esto en cualquier objeto de colección que desee, como new ArrayList(map.entrySet()) ;

Supongo que quieres convertir los valores contenidos en el Map a una list ? Lo más fácil es llamar al método values() de la interfaz de Map . Esto devolverá la Collection de objetos de valor contenidos en el Map .

Tenga en cuenta que esta Collection está respaldada por el objeto Map y cualquier cambio en el objeto Map se reflejará aquí. Por lo tanto, si desea una copia separada que no esté vinculada a su objeto Map , simplemente cree un nuevo objeto List como ArrayList pasando el valor Collection como se muestra a continuación.

 ArrayList list = new ArrayList(map.values()); 

Puedes hacerlo así

 List list = new ArrayList(map.values()); 

Si desea asegurarse de que los valores en la List resultante List encuentran en el orden de las claves de la entrada Map , debe ” SortedMap través de” SortedMap alguna manera.

Comience con una implementación concreta de SortedMap (como TreeMap ) o inserte su Map entrada en SortedMap antes de convertirlo en List . p.ej:

 Map map; List list = new ArrayList( new TreeMap( map )); 

De lo contrario, obtendrá los pedidos nativos que proporcione la implementación de Map , que a menudo puede ser diferente al orden natural de las claves (Try Hashtable o ConcurrentHashMap , por variedad).

  Map map = new HashMap(); map.put("java", 20); map.put("C++", 45); Set > set = map.entrySet(); List> list = new ArrayList>(set); 

podemos tener pares clave y valor en la lista. También podemos obtener la clave y el valor usando Map.Entry iterando sobre la lista.

 "Map map = new HapshMap; map.add("one","java"); map.add("two" ,"spring"); Set> set = map.entrySet(); List> list = new ArrayList> (set); for(Entry entry : list ) { System.out.println(entry.getKey()); System.out.println(entry.getValue()); } " 
  HashMap> map = new HashMap<>(); List list = new ArrayList(); list.add("Java"); list.add("Primefaces"); list.add("JSF"); map.put(1,list); if(map != null){ return new ArrayList((Collection< ? extends String>) map.values()); } 

Este es el método genérico para obtener valores del mapa.

 public static  List ValueListFromMap(HashMap map) { List thingList = new ArrayList<>(); for (Map.Entry entry : map.entrySet()) { thingList.add(entry.getValue()); } return thingList; } 
 // you can use this List list = new ArrayList(map.values()); // or you may use List list = new ArrayList(); for (Map.Entry entry : map.entrySet()) { list.add(entry.getValue()); } 
 Comparator comparator = new Comparator() { @Override public int compare(String s1, String s2) { if (s1 == s2) { return 0; } if (s1 == null) { return -1; } if (s2 == null) { return 1; } return s1.compareToIgnoreCase(s2); } };