Какую роль выполняет метод collect() в Java Stream API?

«Какую роль выполняет метод collect() в Java Stream API?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Метод collect() — это терминальная операция в Stream API, предназначенная для преобразования потока элементов в конкретный результат (контейнер, строку, агрегат). Он принимает объект Collector, который инкапсулирует стратегию накопления и финализации.

Основные цели:

  1. Сбор в коллекцию: toList(), toSet(), toMap().
  2. Агрегация данных: summingInt(), averagingDouble(), maxBy().
  3. Группировка и разделение: groupingBy(), partitioningBy().
  4. Конкатенация строк: joining().

Пример:

List<String> names = List.of("Alice", "Bob", "Charlie");
// Сбор отфильтрованных элементов в новый List
List<String> longNames = names.stream()
    .filter(name -> name.length() > 3)
    .collect(Collectors.toList()); // Результат: ["Alice", "Charlie"]

Почему именно collect()? Он предоставляет гибкий, декларативный способ преобразования потока, используя оптимизированные, готовые коллекторы из класса Collectors или позволяя создавать кастомные.