Как перебрать только значения Map в Java?

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

Ответ

Напрямую итерироваться по Map можно только по парам ключ-значение (entrySet) или ключам (keySet). Для перебора только значений необходимо сначала получить коллекцию значений методом values().

Способы перебора значений:

  1. Цикл for-each:

    Map<String, Integer> map = Map.of("A", 1, "B", 2, "C", 3);
    for (Integer value : map.values()) {
        System.out.println(value); // 1, 2, 3
    }
  2. Итератор:

    Iterator<Integer> iterator = map.values().iterator();
    while (iterator.hasNext()) {
        Integer value = iterator.next();
        // обработка value
    }
  3. Stream API:

    map.values().stream()
               .forEach(System.out::println);
    
    map.values().stream()
               .filter(v -> v > 1)
               .forEach(System.out::println);
  4. Метод forEach (с Java 8):

    map.values().forEach(System.out::println);

Важно: Метод values() возвращает представление (Collection<V>), связанное с исходной мапой. Изменения в мапе отражаются в этой коллекции, но саму коллекцию напрямую изменять (добавлять элементы) нельзя.