Gymterview
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().