Comment itérer via LinkedHashMap avec des listes comme valeurs

J’ai la déclaration LinkedHashMap suivante.

LinkedHashMap<String, ArrayList> test1 

Mon point est de savoir comment je peux parcourir cette carte de hachage. Je veux faire ceci après, pour chaque clé obtenir l’arraylist correspondant et imprimer les valeurs de l’arraylist un par un contre la clé.

J’ai essayé ceci mais n’obtiens que la chaîne de retour,

 Ssortingng key = iterator.next().toSsortingng(); ArrayList value = (ArrayList )test1.get(key) 

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

Au fait, vous devriez vraiment déclarer vos variables comme type d’interface, par exemple Map> .

Je suppose que vous avez une faute de frappe dans votre instruction get et qu’elle devrait être test1.get (clé). Si c’est le cas, je ne suis pas sûr de savoir pourquoi il ne renvoie pas de liste ArrayList, sauf si vous ne saisissez pas le type correct dans la carte.

Cela devrait fonctionner:

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

ou vous pouvez utiliser

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

Vous devez utiliser les noms d’interface lorsque vous déclarez vos vars (et dans vos parameters génériques), à moins que vous n’ayez une raison très précise pour laquelle vous définissez l’utilisation de l’implémentation.

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

Vous pouvez utiliser le jeu d’entrées et effectuer une itération sur les entrées pour accéder directement à la fois à la clé et à la valeur.

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

J’ai essayé ceci mais obtenez seulement la chaîne de retour

Pourquoi penses-tu ça? La méthode get renvoie le type E pour lequel le paramètre de type générique a été choisi, dans votre cas ArrayList .

Dans Java 8:

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