¿Cómo convertir un Mapa de la Lista en Java?
-
06-07-2019 - |
Pregunta
¿Cuál es la mejor manera de convertir un Map<key,value>
a un List<value>
?Sólo iterar sobre todos los valores y los inserta en una lista o estoy con vistas a algo?
Solución
List<Value> list = new ArrayList<Value>(map.values());
suponiendo:
Map<Key,Value> map;
Otros consejos
El problema aquí es que Map
tiene dos valores (una clave y un valor), mientras que a List
solo tiene un valor (un elemento).
Por lo tanto, lo mejor que se puede hacer es obtener un ArrayList
de las claves o los valores. (A menos que hagamos un contenedor para mantener el par clave / valor).
Digamos que tenemos un Set
:
Map<String, String> m = new HashMap<String, String>();
m.put("Hello", "World");
m.put("Apple", "3.14");
m.put("Another", "Element");
Las claves como Map.keySet
se pueden obtener creando un nuevo Collection
de un Map.values
devuelto por <=> método:
List<String> list = new ArrayList<String>(m.keySet());
Si bien los valores como <=> se pueden obtener creando un nuevo <=> a partir de un <=> devuelto por <=> método:
List<String> list = new ArrayList<String>(m.values());
El resultado de obtener la <=> clave:
Apple Another Hello
El resultado de obtener el <=> de los valores:
3.14 Element World
Uso de la API de Java 8 Streams.
List<Value> values = map.values().stream().collect(Collectors.toList());
map.entrySet()
le ofrece una colección de Map.Entry
objetos que contienen clave y valor. luego puede transformar esto en cualquier objeto de colección que desee, como new ArrayList(map.entrySet())
;
una lista de qué?
Suponiendo que map
es su instancia de Map
-
map.values()
devolverá unCollection
que contiene todos los valores del mapa. -
map.keySet()
devolverá unSet
que contiene todas las claves del mapa.
Supongo que usted desea convertir los valores contenidos en el Map
a un list
?Más fácil es llamar a la values()
método de la Map
la interfaz.Esto devolverá el Collection
de valor de los objetos contenidos en la Map
.
Tenga en cuenta que este Collection
está respaldado por la Map
objeto y cualquier cambio en la Map
objeto de reflejar aquí.Así que si usted desea una copia independiente no vinculado a su Map
objeto, basta con crear una nueva List
el objeto como un ArrayList
pasando el valor Collection
como 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 el List<Value>
resultante están en el orden de las teclas de la entrada Map<Key, Value>
, debe " ir a través de " SortedMap
de alguna manera.
O bien comenzar con una implementación concreta TreeMap
(como Map
) o inserte su entrada List
en una Hashtable
antes de convertirla en ConcurrentHashMap
. por ejemplo:
Map<Key,Value> map;
List<Value> list = new ArrayList<Value>( new TreeMap<Key Value>( map ));
De lo contrario, obtendrá el orden nativo que proporciona la implementación <=>, que a menudo puede ser algo diferente al orden de las teclas naturales (intente <=> o <=>, 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());
}