Ответ
Да, Stream API (Java 8+) внедряет ключевые концепции функционального программирования (FP) в Java, остающейся преимущественно объектно-ориентированным языком.
Основные FP-признаки в Stream API:
- Функции как объекты первого класса: Использование лямбда-выражений и ссылок на методы.
- Безопасные операции: Промежуточные операции (
filter,map) должны быть stateless (без побочных эффектов). - Ленивые вычисления (lazy evaluation): Промежуточные операции выполняются только при вызове терминальной операции (
collect,forEach). - Иммутабельность данных: Исходная коллекция не изменяется; создается новый результат.
Пример функционального стиля:
List<String> result = sourceList.stream()
.filter(s -> s.length() > 3) // Лямбда-предикат
.map(String::toUpperCase) // Ссылка на метод
.collect(Collectors.toList()); // Терминальная операция
// sourceList остается неизменной
Почему это гибрид, а не чистое FP: Stream API интегрирован в ООП-среду, использует итераторы внутри и не обеспечивает полной иммутабельности всех структур данных языка.