Iteriere über eine Karte in Java

Iteriere über eine Karte in Java

1. Überblick

In diesem kurzen Artikel werden die verschiedenen Möglichkeiten zum Durchlaufen der Einträge einer Karte in Java erläutert.

Einfach ausgedrückt können wir den Inhalt einer Karte mitkeySet(), valueSet() oderentrySet() extrahieren. Da dies alles Mengen sind, gelten für alle ähnliche Iterationsprinzipien.

The Map.entrySet [.s1] # API gibt eine Sammlungsansicht der Karte zurück, deren Elemente aus der KlasseMaptammen. The only way to obtain a reference to a single map entry is from the iterator of this collection view. #

Theentry.getKey() gibt den Schlüssel zurück undentry.getValue() gibt den entsprechenden Wert zurück.

Schauen wir uns einige davon an.

2. EntrySet undFor Loop

Lassen Sie uns zunächst sehen, wieiterate 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());
    }
}

Hier konvertieren wir unsere Karte in eine Reihe von Einträgen und durchlaufen sie dann mit dem klassischen Ansatz für jeden Eintrag.

Wir können auf einen Schlüssel jedes Eintrags zugreifen, indem wirgetKey() aufrufen, und wir können auf einen Wert jedes Eintrags zugreifen, indem wirgetValue(). aufrufen

 

3. Iterator undEntrySet

Ein anderer Ansatz wäre, eine Reihe von Einträgen zu erhalten und die Iteration unter Verwendung einesIterator: durchzuführen

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

Beachten Sie, wie wir dieIterator-Instanz mithilfe deriterator()-API vonentrySet(). erhalten können. Anschließend durchlaufen wir wie üblich den Iterator mititerator.next().

4. Mit Lambdas

Lassen Sie uns nun sehen, wie SieMap mitlambda-Ausdrücken iterieren.

Wie die meisten anderen Dinge in Java 8 ist dies viel einfacher als die Alternativen. Wir werden dieforEach()-Methode verwenden:

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

In diesem Fall müssen wir eine Karte nicht in eine Reihe von Einträgen konvertieren. Um mehr über Lambda-Ausdrücke zu erfahren, können Siestart here verwenden.

5. Stream API

Die API vonStream ist eine der Hauptfunktionen vonJava 8. Wir können diese Funktion auch verwenden, um einMap zu durchlaufen, aber wie in den vorherigen Beispielen müssen wir zuerst eine Reihe von Einträgen erhalten:

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

Dies sollte verwendet werden, wenn wir eine zusätzliche Verarbeitung vonStreamplanen. Ansonsten ist es nur ein einfachesforEach(), wie zuvor beschrieben.

Weitere Informationen zurStream-API finden Sie unterthis article.

6. Fazit

In diesem Tutorial haben wir uns auf eine einfache, aber kritische Operation konzentriert - das Durchlaufen der Einträge einer Karte.

Wir haben einige Methoden gesehen, die nur mit Java 8 verwendet werden können, nämlich Lambda-Ausdrücke und dieStream-API.

Wie immer finden Sie die Codebeispiele im Artikelover on GitHub.