recorrer ordenar ordenado example diccionario java collections linkedhashmap

ordenar - recorrer hashmap java foreach



Cómo iterar a través de LinkedHashMap con listas como valores (5)

En Java 8:

Map<String, List<String>> test1 = new LinkedHashMap<String, List<String>>(); test1.forEach((key,value) -> { System.out.println(key + " -> " + value); });

He seguido la declaración de LinkedHashMap.

LinkedHashMap<String, ArrayList<String>> test1

mi punto es cómo puedo iterar a través de este mapa hash. Quiero hacer esto a continuación, para cada clave obtener el arraylist correspondiente e imprimir los valores del arraylist uno por uno contra la clave.

He intentado esto, pero sólo obtiene la cadena devuelve

String key = iterator.next().toString(); ArrayList<String> value = (ArrayList<String> )test1.get(key)


Puede usar el conjunto de entradas e iterar sobre las entradas, lo que le permite acceder directamente a la clave y al valor.

for (Entry<String, ArrayList<String>> entry : test1.entrySet() { System.out.println(entry.getKey() + "/" + entry.getValue()); }

He intentado esto, pero sólo obtiene la cadena devuelve

¿Por qué piensas eso? El método get devuelve el tipo E para el que se eligió el parámetro de tipo genérico, en su caso ArrayList<String> .


Supongo que tiene un error tipográfico en su declaración de obtención y que debería ser test1.get (clave). Si es así, no estoy seguro de por qué no está devolviendo un ArrayList a menos que no esté introduciendo el tipo correcto en el mapa en primer lugar.

Esto debería funcionar:

// populate the map Map<String, List<String>> test1 = new LinkedHashMap<String, List<String>>(); test1.put("key1", new ArrayList<String>()); test1.put("key2", new ArrayList<String>()); // loop over the set using an entry set for( Map.Entry<String,List<String>> entry : test1.entrySet()){ String key = entry.getKey(); List<String>value = entry.getValue(); // ... }

o puedes usar

// second alternative - loop over the keys and get the value per key for( String key : test1.keySet() ){ List<String>value = test1.get(key); // ... }

Debe usar los nombres de la interfaz al declarar sus vars (y en sus parámetros genéricos) a menos que tenga una razón muy específica por la que está definiendo el uso de la implementación.


// iterate over the map for(Entry<String, ArrayList<String>> entry : test1.entrySet()){ // iterate over each entry for(String item : entry.getValue()){ // print the map''s key with each value in the ArrayList System.out.println(entry.getKey() + ": " + item); } }


for (Map.Entry<String, ArrayList<String>> entry : test1.entrySet()) { String key = entry.getKey(); ArrayList<String> value = entry.getValue(); // now work with key and value... }

Por cierto, deberías declarar tus variables como el tipo de interfaz, como Map<String, List<String>> .