Itérer sur une carte en Java

Itérer sur une carte en Java

1. Vue d'ensemble

Dans cet article rapide, nous allons examiner les différentes façons d'itérer les entrées d'une carte en Java.

En termes simples, nous pouvons extraire le contenu d'une carte en utilisantkeySet(), valueSet() ouentrySet(). Puisque ce sont tous des ensembles, des principes d’itération similaires s’appliquent à tous.

The Map.entrySet [.s1] # API renvoie une vue de collection de la carte, dont les éléments sont de la classeMap. The only way to obtain a reference to a single map entry is from the iterator of this collection view. #

Telleentry.getKey() renvoie la clé etentry.getValue() renvoie la valeur correspondante.

Jetons un coup d’œil à quelques-uns d’entre eux.

2. EntrySet etFor Loop

Tout d'abord, voyons commentiterate through a Map using the Entry*Set*:

public void iterateUsingEntrySet(Map map) {
    for (Map.Entry entry : map.entrySet()) {
        System.out.println(entry.getKey() + ":" + entry.getValue());
    }
}

Ici, nous convertissons notre carte en un ensemble d'entrées, puis nous les parcourons en utilisant l'approche classique pour chaque.

On peut accéder à une clé de chaque entrée en appelantgetKey() et on peut accéder à une valeur de chaque entrée en appelantgetValue().

 

3. Iterator etEntrySet

Une autre approche consisterait à obtenir un ensemble d'entrées et à effectuer l'itération en utilisant unIterator:

public void iterateUsingIteratorAndEntry(Map map) {
    Iterator> iterator = map.entrySet().iterator();
    while (iterator.hasNext()) {
        Map.Entry entry = iterator.next();
        System.out.println(entry.getKey() + ":" + entry.getValue());
    }
}

Remarquez comment nous pouvons obtenir l'instanceIterator en utilisant l'APIiterator() deentrySet(). Ensuite, comme d'habitude, nous bouclons l'itérateur aveciterator.next().

4. Avec Lambdas

Voyons maintenant comment itérer unMap en utilisant les expressionslambda.

Comme la plupart des autres choses dans Java 8, cela s'avère beaucoup plus simple que les alternatives; nous utiliserons la méthodeforEach():

public void iterateUsingLambda(Map map) {
    map.forEach((k, v) -> System.out.println((k + ":" + v)));
}

Dans ce cas, il n'est pas nécessaire de convertir une carte en un ensemble d'entrées. Pour en savoir plus sur les expressions lambda, vous pouvezstart here.

5. APIStream

L'APIStream est l'une des principales fonctionnalités deJava 8. Nous pouvons également utiliser cette fonctionnalité pour parcourir unMap, mais comme dans les exemples précédents, nous devons d'abord obtenir un ensemble d'entrées:

public void iterateUsingStreamAPI(Map map) {
    map.entrySet().stream()
      // ...
      .forEach(e -> System.out.println(e.getKey() + ":" + e.getValue()));
}

Ceci devrait être utilisé lorsque nous prévoyons d'effectuer un traitement supplémentaire deStream. Sinon, il s’agit d’un simpleforEach() comme décrit précédemment.

Pour en savoir plus sur l'API deStream, consultezthis article.

6. Conclusion

Dans ce didacticiel, nous nous sommes concentrés sur une opération simple mais critique: parcourir les entrées d'une carte.

Nous avons vu quelques méthodes qui ne peuvent être utilisées qu'avec Java 8, à savoir les expressions Lambda et l'APIStream.

Comme toujours, les exemples de code dans l'article peuvent être trouvésover on GitHub.