recorrer - ¿Cómo convertir un mapa a la lista en Java?
listas en java (13)
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;
}
¿Cuál es la mejor manera de convertir un Map<key,value>
en un List<value>
? ¿Solo iterar sobre todos los valores e insertarlos en una lista o estoy pasando por alto algo?
El problema aquí es que el 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 una envoltura 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 claves como una List
se pueden obtener creando una nueva ArrayList
partir de un Set
devuelto por el método Map.keySet
:
List<String> list = new ArrayList<String>(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<String> list = new ArrayList<String>(m.values());
El resultado de obtener la List
de claves:
Apple Another Hello
El resultado de obtener la List
de valores:
3.14 Element World
Puedes hacerlo asi
List<Value> list = new ArrayList<Value>(map.values());
Si desea asegurarse de que los valores en la List<Value>
resultante List<Value>
estén en el orden de las Map<Key, Value>
entrada Map<Key, Value>
, debe "pasar por" el SortedMap
alguna manera.
Comience con una implementación concreta de SortedMap
(como TreeMap
) o inserte su Map
entrada en un SortedMap
antes de convertirlo en List
. p.ej:
Map<Key,Value> map;
List<Value> list = new ArrayList<Value>( new TreeMap<Key Value>( map ));
De lo contrario, obtendrá cualquier orden nativo que proporcione la implementación del Map
, que a menudo puede ser algo más que el ordenamiento de claves naturales (Pruebe Hashtable
o ConcurrentHashMap
, para la variedad).
Supongo que quieres convertir los valores contenidos en el Map
a una list
? Lo más fácil es llamar al método de values()
de la interfaz del 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í. Entonces, si desea una copia separada no vinculada a su objeto Map
, simplemente cree un nuevo objeto List
como un ArrayList
pase el valor Collection
como se muestra a continuación.
ArrayList<String> list = new ArrayList<String>(map.values());
Usando la API de Java 8 Streams.
List<Value> values = map.values().stream().collect(Collectors.toList());
una lista de que?
Asumiendo que map
es tu instancia de Map
-
map.values()
devolverá unaCollection
contiene todos los valores del mapa. -
map.keySet()
devolverá unSet
contiene todas las claves del mapa.
map.entrySet()
le ofrece una colección de objetos Map.Entry
que contienen tanto la clave como el valor. luego puede transformar esto en cualquier objeto de colección que desee, como el new ArrayList(map.entrySet())
;
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());
}
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 un par de clave y valor en la lista. También se puede obtener la clave y el valor utilizando Map.Entry al iterar sobre la lista.
"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());
} "
// 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());
}
List<Value> list = new ArrayList<Value>(map.values());
asumiendo:
Map<Key,Value> map;