J'ai la déclaration suivante LinkedHashMap.
LinkedHashMap<String, ArrayList<String>> test1
mon point est comment puis-je parcourir cette carte de hachage. Je souhaite procéder comme suit: pour chaque clé, récupérez l’arrayliste correspondant et affichez les valeurs une par une contre la clé.
J'ai essayé ceci mais get ne retourne que string,
String key = iterator.next().toString();
ArrayList<String> value = (ArrayList<String> )test1.get(key)
for (Map.Entry<String, ArrayList<String>> entry : test1.entrySet()) {
String key = entry.getKey();
ArrayList<String> value = entry.getValue();
// now work with key and value...
}
En passant, vous devriez vraiment déclarer vos variables comme type d’interface, comme Map<String, List<String>>
.
Je suppose que vous avez une faute de frappe dans votre déclaration get et qu'il devrait s'agir de test1.get (clé). Si tel est le cas, je ne sais pas pourquoi il ne renvoie pas de liste de tableaux à moins que vous ne mettiez pas le type correct dans la carte en premier lieu.
Cela devrait fonctionner:
// 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();
// ...
}
ou vous pouvez utiliser
// second alternative - loop over the keys and get the value per key
for( String key : test1.keySet() ){
List<String>value = test1.get(key);
// ...
}
Vous devez utiliser les noms d'interface lors de la déclaration de vos vars (et de vos paramètres génériques), sauf si vous avez une raison très spécifique pour laquelle vous définissez à l'aide de l'implémentation.
// 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);
}
}
Dans Java 8:
Map<String, List<String>> test1 = new LinkedHashMap<String, List<String>>();
test1.forEach((key,value) -> {
System.out.println(key + " -> " + value);
});
Vous pouvez utiliser le jeu d'entrées et parcourir les entrées, ce qui vous permet d'accéder directement à la clé et à la valeur.
for (Entry<String, ArrayList<String>> entry : test1.entrySet() {
System.out.println(entry.getKey() + "/" + entry.getValue());
}
J'ai essayé mais je ne récupère que la chaîne
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<String>
.