Ответ
Stream API был добавлен в Java 8 (выпущена в марте 2014 года) в рамках JSR-335 (Project Lambda). Это стало одним из главных нововведений, привнесших элементы функционального программирования в язык.
Что это дало:
- Возможность выполнять сложные операции обработки данных (фильтрация, преобразование, агрегация) в декларативном стиле.
- Поддержку параллельных вычислений почти "из коробки" через
parallelStream(). - Улучшенную читаемость кода при работе с коллекциями.
Пример сравнения "до" и "после":
// До Java 8 (императивный стиль)
List<String> result = new ArrayList<>();
for (String name : names) {
if (name.startsWith("A")) {
result.add(name.toUpperCase());
}
}
// С Java 8 (декларативный стиль с Stream API)
List<String> result = names.stream() // Источник
.filter(name -> name.startsWith("A")) // Промежуточная операция
.map(String::toUpperCase) // Промежуточная операция
.collect(Collectors.toList()); // Терминальная операция
Stream API работает по модели источник → промежуточные операции → терминальная операция и поддерживает ленивые вычисления.