РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
533 of 1163 menu

Метод toMap

Метод toMap класса Collectors собирает элементы потока в коллекцию типа Map. В первый параметр мы передаем функцию, которая извлекает ключ из элемента. Во второй параметр мы передаем функцию, которая извлекает значение из элемента. В третий параметр мы передаем функцию слияния, которая решает конфликт, когда два элемента дают одинаковый ключ. В четвертый параметр мы передаем фабрику, создающую конкретную реализацию Map, например TreeMap.

Первые два параметра обязательны, а функция слияния и фабрика Map - необязательны. Если дубликаты ключей возможны, а функция слияния не задана, метод выбрасывает исключение IllegalStateException.

Синтаксис

Collectors.toMap(keyMapper, valueMapper) Collectors.toMap(keyMapper, valueMapper, mergeFunction) Collectors.toMap(keyMapper, valueMapper, mergeFunction, mapFactory)

Пример

Давайте соберем список чисел в Map, где ключом будет само число, а значением - его квадрат:

import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<Integer> list = List.of(1, 2, 3, 4, 5); Map<Integer, Integer> res = list.stream() .collect(Collectors.toMap( n -> n, n -> n * n )); System.out.println(res); } }

Результат выполнения кода:

{1=1, 2=4, 3=9, 4=16, 5=25}

Пример

Давайте соберем список строк в Map, где ключом будет строка, а значением - ее длина:

import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<String> list = List.of("abcde", "abc", "ab"); Map<String, Integer> res = list.stream() .collect(Collectors.toMap( s -> s, s -> s.length() )); System.out.println(res); } }

Результат выполнения кода:

{abcde=5, abc=3, ab=2}

Пример

Если два элемента дают одинаковый ключ, нужно передать функцию слияния. Давайте при дубликате ключа оставим последнее значение:

import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<String> list = List.of("ab", "abc", "ab"); Map<String, Integer> res = list.stream() .collect(Collectors.toMap( s -> s, s -> s.length(), (oldValue, newValue) -> newValue )); System.out.println(res); } }

Результат выполнения кода:

{ab=2, abc=3}

Пример

Четвертым параметром можно задать конкретную реализацию Map. Давайте соберем результат в TreeMap, чтобы ключи были отсортированы:

import java.util.List; import java.util.Map; import java.util.TreeMap; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<Integer> list = List.of(3, 1, 2, 5, 4); Map<Integer, Integer> res = list.stream() .collect(Collectors.toMap( n -> n, n -> n * n, (oldValue, newValue) -> newValue, TreeMap::new )); System.out.println(res); } }

Результат выполнения кода:

{1=1, 2=4, 3=9, 4=16, 5=25}

Смотрите также

  • метод toList,
    который собирает элементы потока в список
  • метод toSet,
    который собирает элементы потока в множество
  • метод groupingBy,
    который группирует элементы по ключу
  • класс Collectors,
    который содержит методы для сбора элементов потока
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить