Что такое Stream API в Java и каковы его основные преимущества?

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

Ответ

Stream API (пакет java.util.stream) — это абстракция для декларативной обработки последовательностей данных (коллекций, массивов, I/O) в функциональном стиле.

Ключевые характеристики:

  • Не хранит данные. Поток — это конвейер операций над источником данных.
  • Не изменяет источник. Операции возвращают новый поток или результат.
  • Ленивые вычисления. Промежуточные операции (intermediate) выполняются только при вызове терминальной операции (terminal).
  • Однократная обработка. После вызова терминальной операции поток считается потребленным.

Основные преимущества:

  1. Декларативность и читаемость: Код описывает что нужно сделать, а не как.
  2. Удобная параллельная обработка: Легко переключиться на параллельное выполнение с помощью .parallelStream() или .parallel().
  3. Оптимизация: Возможность внутренних оптимизаций (short-circuiting, fusion операций).

Пример цепочки операций:

List<String> result = names.stream()          // Источник
        .filter(s -> s.startsWith("A"))      // Промежуточная операция (фильтрация)
        .map(String::toUpperCase)            // Промежуточная операция (преобразование)
        .sorted()                            // Промежуточная операция (сортировка)
        .collect(Collectors.toList());       // Терминальная операция (сбор результата)

Типы операций:

  • Intermediate: filter, map, sorted, distinct, limit.
  • Terminal: forEach, collect, reduce, count, anyMatch.