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


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


575
2018-06-22 11:45


origen


Respuestas:


List<Value> list = new ArrayList<Value>(map.values());

asumiendo:

Map<Key,Value> map;

1124
2018-06-22 11:48



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

Por lo tanto, lo mejor que se puede hacer es conseguir un List de las llaves o los valores. (A menos que hagamos un envoltorio para aferrarnos al 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 llaves como una List puede obtenerse creando un nuevo ArrayList a partir de una Set devuelto por el Map.keySet método:

List<String> list = new ArrayList<String>(m.keySet());

Mientras que los valores como List se puede obtener creando un nuevo ArrayList a partir de una Collection devuelto por el Map.values método:

List<String> list = new ArrayList<String>(m.values());

El resultado de obtener el List de llaves:

manzana
Otro
Hola

El resultado de obtener el List de valores:

3.14
Elemento
Mundo

124
2018-06-22 11:51



Usando Java 8 Streams API.

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

23
2017-09-19 08:34



una lista de qué?

Asumiendo map es tu instancia de Map

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

20
2018-06-22 11:49



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


18
2017-11-16 19:00



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

Tenga en cuenta que esto Collection está respaldado por el Map objeto y cualquier cambio en el Map el objeto se reflejará aquí. Entonces, si quiere una copia por separado no vinculada a su Map objeto, simplemente crea un nuevo List objeto como un ArrayList pasando el valor Collection como a continuación.

ArrayList<String> list = new ArrayList<String>(map.values());

12
2018-06-22 11:53



Puedes hacerlo así

List<Value> list = new ArrayList<Value>(map.values());

6
2017-11-23 00:17



Si desea garantizar los valores en la resultante List<Value> están en el orden de las claves de la entrada Map<Key, Value>, necesitas "ir por" SortedMap de algun modo.

Ya sea comienzo con un concreto SortedMap implementación (como TreeMap) o inserte su entrada Map en un SortedMap antes de convertir eso a List. p.ej.:

Map<Key,Value> map;
List<Value> list = new ArrayList<Value>( new TreeMap<Key Value>( map ));

De lo contrario, obtendrás lo que ordene nativo el Map la implementación proporciona, que a menudo puede ser algo distinto al orden natural de las claves (prueba Hashtable o ConcurrentHashMap, por variedad).


4
2018-03-18 02:27