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(); List value = 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); });