web-dev-qa-db-fra.com

Boucle Foreach en Java pour Dictionnaire

Je veux parcourir tous les éléments d'un dictionnaire Java. pour clarifier ce que je veux faire, c'est le code C #

Dictionary<string, Label> LableList = new Dictionary<string, Label>();
foreach (KeyValuePair<string, Label> z in LabelList);

Je ne sais pas comment faire cela est Java, par exemple je l'ai fait

for(Object z: dic)

mais il dit que ce n'est pas iterable. S'il vous plaît donnez votre avis......

11
Daniel

Je suppose que vous avez un Map<String, Label> qui est la structure de dictionnaire intégrée à Java. Java ne vous permet pas de parcourir directement une variable Map (c’est-à-dire qu’elle n’implémente pas Iterable) car ce que vous êtes en train de parcourir est ambigu.

Il suffit de choisir de parcourir les clés, les valeurs ou les entrées (les deux).

par exemple.

Map<String, Label> map = new HashMap<String, Label>();
//...

for ( String key : map.keySet() ) {
}

for ( Label value : map.values() ) {
}

for ( Map.Entry<String, Label> entry : map.entrySet() ) {
    String key = entry.getKey();
    Label value = entry.getValue();
}

Votre code C # semble être identique à l'itération sur les entrées (dernier exemple).

33
Mark Peters

Java.util.Map est l'équivalent du dictionnaire et ci-dessous est un exemple de la façon dont vous pouvez parcourir chaque entrée.

for(Map.Entry<K, V> e : map.entrySet())
{
    System.out.println(e.getKey()+": "+e.getValue());
}
4
Aravind R. Yarram

Votre meilleur pari est d'utiliser ceci:

for (String key : LableList.keys()) {
    Label value = LableList.get(key);

    // do what you wish with key and value here
}

En Java, cependant, il vaut mieux ne pas utiliser Dictionary comme vous le feriez dans .NET, mais utiliser l’une des sous-classes Map, par exemple. HashMap. Vous pouvez parcourir l'un de ces éléments comme ceci:

for (Entry<String, Label> e : myMap.entrySet()) {
    // Do what you wish with e.getKey() and e.getValue()
}

Il est également déconseillé d'utiliser Dictionnaire dans le fichier javadoc officiel.

0
Fritz H

J'essayais d'ajouter le contenu d'un HashMap (a) dans un autre HashMap (b).

Je trouvais simple de parcourir HashMap de cette façon:

a.forEach((k, v) -> b.put(k, v));

Vous pouvez manipuler mon exemple pour faire ce que vous voulez de l'autre côté de "->".

Notez qu'il s'agit d'une expression Lambda et que vous devez utiliser Java 1.8 (Java 8) ou une version ultérieure pour que cela fonctionne. :-)

0
Peter Clausen