Как использовать цикл for-each для перебора Map в Java?

«Как использовать цикл for-each для перебора Map в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, можно, но не напрямую по самому Map. Интерфейс Map не реализует Iterable, поэтому цикл for (Item item : map) вызовет ошибку компиляции.

Правильные способы: Используйте один из трех представлений (views) карты, которые возвращают коллекции (Set или Collection), поддерживающие Iterable.

  1. Перебор пар «ключ-значение» (наиболее частый случай):

    Map<String, Integer> scores = Map.of("Alice", 95, "Bob", 87);
    for (Map.Entry<String, Integer> entry : scores.entrySet()) {
        System.out.println(entry.getKey() + " -> " + entry.getValue());
    }
  2. Перебор только ключей:

    for (String key : scores.keySet()) {
        System.out.println("Key: " + key);
    }
  3. Перебор только значений:

    for (Integer value : scores.values()) {
        System.out.println("Value: " + value);
    }

С Java 8+ рекомендуется использовать forEach с лямбда-выражением:

scores.forEach((key, value) -> System.out.println(key + ": " + value));