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

Метод groupingBy

Метод groupingBy класса Collectors выполняет группировку элементов потока. В первом параметре мы передаем функцию-классификатор, которая определяет, по какому признаку группировать элементы. Вторым (необязательным) параметром можно передать нижестоящий коллектор, который определяет, что делать с элементами каждой группы. Третьим (необязательным) параметром можно передать фабрику для создания Map. Метод возвращает объект типа Map, где ключ - это результат классификатора, а значение - результат работы нижестоящего коллектора.

Синтаксис

Collectors.groupingBy(classifier) Collectors.groupingBy(classifier, downstream) Collectors.groupingBy(classifier, mapFactory, downstream)

Пример

Давайте сгруппируем строки по их длине:

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("a", "bb", "cc", "ddd", "ee"); Map<Integer, List<String>> res = list.stream() .collect(Collectors.groupingBy(s -> s.length())); System.out.println(res); } }

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

{1=[a], 2=[bb, cc, ee], 3=[ddd]}

Пример

Давайте сгруппируем числа по остатку от деления на 2 и посчитаем количество элементов в каждой группе:

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, Long> res = list.stream() .collect(Collectors.groupingBy( n -> n % 2, Collectors.counting() )); System.out.println(res); } }

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

{0=2, 1=3}

Пример

Давайте сгруппируем строки по длине и преобразуем элементы каждой группы в верхний регистр:

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("a", "bb", "cc", "ddd"); Map<Integer, List<String>> res = list.stream() .collect(Collectors.groupingBy( s -> s.length(), Collectors.mapping( s -> s.toUpperCase(), Collectors.toList() ) )); System.out.println(res); } }

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

{1=[A], 2=[BB, CC], 3=[DDD]}

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

  • класс Collectors,
    который содержит методы для коллекционирования
  • метод partitioningBy,
    который делит элементы на две группы
  • метод toMap,
    который собирает элементы в Map
  • метод mapping,
    который преобразует элементы перед сбором
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить