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

Метод partitioningBy

Метод partitioningBy класса Collectors разделяет элементы потока на две группы по заданному условию. В отличие от метода groupingBy, который может создавать произвольное количество групп, partitioningBy всегда создает ровно две группы: одну для элементов, удовлетворяющих условию (ключ true), и вторую для всех остальных (ключ false). В первый параметр мы передаем предикат - функцию, возвращающую булево значение. Вторым необязательным параметром можно передать нижестоящий коллектор, который будет применен к каждой из двух групп. Результатом работы метода является объект типа Collector, который при использовании в методе collect возвращает Map<Boolean, List<T>> или другой тип, определяемый нижестоящим коллектором.

Синтаксис

Collectors.partitioningBy(predicate) Collectors.partitioningBy(predicate, downstream)

Пример

Давайте разделим список чисел на четные и нечетные:

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<Boolean, List<Integer>> res = list.stream() .collect(Collectors.partitioningBy(n -> n % 2 == 0)); System.out.println(res); } }

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

{false=[1, 3, 5], true=[2, 4]}

Пример

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

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", "ab", "abc", "a", "abcd"); Map<Boolean, Long> res = list.stream() .collect(Collectors.partitioningBy( s -> s.length() > 3, Collectors.counting() )); System.out.println(res); } }

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

{false=3, true=2}

Пример

Давайте разделим список строк по условию и соберем каждую группу в множество с помощью нижестоящего коллектора toSet:

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

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

{false=[ab], true=[abcde, abc]}

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

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