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>>
.