Ответ
Stream API (пакет java.util.stream) — это абстракция для декларативной обработки последовательностей данных (коллекций, массивов, I/O) в функциональном стиле.
Ключевые характеристики:
- Не хранит данные. Поток — это конвейер операций над источником данных.
- Не изменяет источник. Операции возвращают новый поток или результат.
- Ленивые вычисления. Промежуточные операции (intermediate) выполняются только при вызове терминальной операции (terminal).
- Однократная обработка. После вызова терминальной операции поток считается потребленным.
Основные преимущества:
- Декларативность и читаемость: Код описывает что нужно сделать, а не как.
- Удобная параллельная обработка: Легко переключиться на параллельное выполнение с помощью
.parallelStream()или.parallel(). - Оптимизация: Возможность внутренних оптимизаций (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.