junior
Для чего нужен метод collect в стримах?
collect() — терминальная операция стрима, которая сворачивает элементы в изменяемый контейнер: коллекцию, строку, Map или любую другую структуру данных. Метод принимает Collector, определяющий четыре этапа: создание аккумулятора (supplier), добавление элемента (accumulator), объединение аккумуляторов при параллельном выполнении (combiner) и опциональная финализация (finisher).
Стандартные коллекторы (класс Collectors)
| Коллектор | Описание |
|---|---|
toList(), toSet(), toCollection() |
Сбор в список, множество или произвольную коллекцию |
toMap(), toConcurrentMap() |
Преобразование в Map |
joining() |
Конкатенация строк с разделителем |
groupingBy() |
Группировка по ключу → Map<K, List<T>> |
partitioningBy() |
Разбиение на две группы → Map<Boolean, List<T>> |
counting() |
Подсчёт количества |
summingInt/Double/Long() |
Сумма |
averagingInt/Double/Long() |
Среднее |
summarizingInt/Double/Long() |
Статистика (min, max, sum, avg, count) |
mapping() |
Дополнительное преобразование для вложенных коллекторов |
Создание собственного коллектора
Пример
Collector<String, List<String>, List<String>> toList = Collector.of(
ArrayList::new, // supplier
List::add, // accumulator
(l1, l2) -> { l1.addAll(l2); return l1; } // combiner
);
На собеседовании: знание
toList(),toMap(),groupingBy()иjoining()обязательно. Дополнительный балл за понимание четырёх этапов коллектора и умение создать собственный черезCollector.of().