Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник Java

Collectors.toMap()

Сборщик, который строит словарь из элементов потока.

Доступно с: Java 8

Синтаксис

static <T, K, U> Collector<T, ?, Map<K, U>> toMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper)
static <T, K, U> Collector<T, ?, Map<K, U>> toMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper, BinaryOperator<U> mergeFunction)

Параметры

ПараметрТипОписание
keyMapperFunction<? super T, ? extends K>Получает ключ из элемента.
valueMapperFunction<? super T, ? extends U>Получает значение из элемента.
mergeFunctionBinaryOperator<U>Необязательно: что делать при повторе ключа.

Возвращаемое значение

Collector<T, ?, Map<K, U>>Сборщик в словарь.

Примеры

Словарь «имя — длина»:

void main() {
    Map<String, Integer> lengths = Stream.of("Anna", "Oleg", "Ivanka")
        .collect(Collectors.toMap(n -> n, String::length));
    IO.println(lengths.get("Ivanka"));
}

Результат:

6

Повтор ключа без функции слияния — ошибка:

void main() {
    List<String> words = List.of("apple", "avocado", "banana");
    try {
        words.stream().collect(Collectors.toMap(w -> w.charAt(0), w -> w));
    } catch (IllegalStateException e) {
        IO.println(e.getMessage());
    }
    Map<Character, String> joined = words.stream()
        .collect(Collectors.toMap(w -> w.charAt(0), w -> w, (a, b) -> a + "+" + b, TreeMap::new));
    IO.println(joined);
}

Результат:

Duplicate key a (attempted merging values apple and avocado)
{a=apple+avocado, b=banana}

Примечания

Если два элемента дают один ключ, без третьего аргумента будет IllegalStateException: Duplicate key. Третий аргумент решает конфликт, четвёртый задаёт тип словаря (TreeMap::new, LinkedHashMap::new). Значение null не допускается — NullPointerException. Если нужно сгруппировать несколько элементов под одним ключом, используйте groupingBy().

См. также

  • Collectors.groupingBy() — Сборщик, который раскладывает элементы по группам с общим ключом.
  • HashMap — Словарь на основе хеш-таблицы: быстрый поиск по ключу, порядок не гарантирован.
  • Map.merge() — Добавляет значение по ключу или объединяет его с уже существующим.

Вопросы и ответы по теме

В учебнике

  • Коллекторы — Метод collect и класс Collectors — toList, toSet, toMap, joining, counting, summingInt, averagingDouble и ошибка повторяющегося ключа.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.