Iteruj po mapie w Javie

1. Przegląd

W tym krótkim artykule przyjrzymy się różnym sposobom iteracji przez wpisy mapy w Javie.

Mówiąc najprościej, możemy wyodrębnić zawartość mapy za pomocą keySet (), valueSet () lub entrySet () . Ponieważ są to wszystkie zbiory, do wszystkich mają zastosowanie podobne zasady iteracji.

Map.entrySet API zwraca kolekcji widoku mapy, której elementy są ze Mapa klasie. Jedynym sposobem uzyskania odwołania do pojedynczego wpisu mapy jest użycie iteratora tego widoku kolekcji.

T on entry.getKey () zwraca klucz i entry.getValue () zwraca odpowiednią wartość.

Przyjrzyjmy się kilku z nich.

2. EntrySet i for Loop

Najpierw zobaczmy, jak iterować mapę przy użyciu zestawu wpisów :

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

Tutaj konwertujemy naszą mapę na zestaw wpisów, a następnie przechodzimy przez nie przy użyciu klasycznego podejścia for-each.

Możemy uzyskać dostęp do klucza każdego wpisu, wywołując getKey () , a wartość każdego wpisu możemy uzyskać, wywołując getValue ().

3. Iterator i EntrySet

Innym podejściem byłoby uzyskanie zestawu wpisów i wykonanie iteracji za pomocą iteratora:

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

Zwróć uwagę, jak możemy uzyskać instancję Iterator za pomocą funkcji API iterator () funkcji entrySet (). Następnie, jak zwykle, przechodzimy przez iterator za pomocą iterator.next ().

4. Z Lambdami

Zobaczmy teraz, jak iterować mapę przy użyciu wyrażeń lambda .

Jak większość innych rzeczy w Javie 8, okazuje się to być dużo prostsze niż alternatywy; użyjemy metody forEach () :

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

W takim przypadku nie musimy konwertować mapy na zestaw wpisów. Aby dowiedzieć się więcej o wyrażeniach lambda, możesz zacząć tutaj.

5. Stream API

Stream API to jedna z głównych funkcji Java 8 . Możemy użyć tej funkcji do zapętlenia mapy, ale tak jak w poprzednich przykładach, musimy najpierw uzyskać zestaw wpisów:

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

Powinno to być używane, gdy planujemy wykonać dodatkowe przetwarzanie strumienia . W przeciwnym razie jest to prosta metoda forEach (), jak opisano wcześniej.

Aby dowiedzieć się więcej o Stream API, zapoznaj się z tym artykułem.

6. Wniosek

W tym samouczku skupiliśmy się na prostej, ale krytycznej operacji - iteracji przez wpisy mapy.

Widzieliśmy kilka metod, których można używać tylko w Javie 8, a mianowicie wyrażenia Lambda i Stream API.

Jak zawsze, przykłady kodu w artykule można znaleźć na GitHub.