Итерировать по карте в Java

Итерировать по карте в Java

1. обзор

В этой быстрой статье мы рассмотрим различные способы перебора записей карты в Java.

Проще говоря, мы можем извлечь содержимое карты с помощьюkeySet(), valueSet() илиentrySet(). Поскольку это все множества, одинаковые принципы итерации применяются ко всем из них.

The Map.entrySet [.s1] # API возвращает коллекцию-представление карты, элементы которой относятся к классуMap. The only way to obtain a reference to a single map entry is from the iterator of this collection view. #

Theentry.getKey() возвращает ключ, аentry.getValue() возвращает соответствующее значение.

Давайте посмотрим на некоторые из них.

2. EntrySet иFor Loop

Во-первых, давайте посмотрим, какiterate 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());
    }
}

Здесь мы преобразуем нашу карту в набор записей, а затем перебираем их, используя классический подход for-each.

Мы можем получить доступ к ключу каждой записи, вызвавgetKey(), и мы можем получить доступ к значению каждой записи, вызвавgetValue().

 

3. Iterator иEntrySet

Другой подход - получить набор записей и выполнить итерацию с использованиемIterator:

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

Обратите внимание, как мы можем получить экземплярIterator, используяiterator() APIentrySet().. Затем, как обычно, мы перебираем итератор с помощьюiterator.next().

4. С лямбдами

Давайте теперь посмотрим, как выполнить итерациюMap, используя выраженияlambda.

Как и большинство других вещей в Java 8, это оказывается намного проще, чем альтернативы; мы воспользуемся методомforEach():

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

В этом случае нам не нужно преобразовывать карту в набор записей. Чтобы узнать больше о лямбда-выражениях, вы можетеstart here.

5. Stream API

APIStream - одна из основных функцийJava 8. Мы можем использовать эту функцию для циклического перебораMap, но, как и в предыдущих примерах, нам нужно сначала получить набор записей:

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

Это следует использовать, когда мы планируем выполнить дополнительную обработкуStream. В противном случае это простоforEach(), как описано ранее.

Чтобы узнать больше об APIStream, ознакомьтесь сthis article.

6. Заключение

В этом руководстве мы сосредоточились на простой, но важной операции - переборе записей на карте.

Мы видели несколько методов, которые можно использовать только с Java 8, а именно лямбда-выражения и APIStream.

Как всегда, примеры кода в статье можно найтиover on GitHub.