Ответ
Функциональное программирование в Java — это парадигма, основанная на использовании чистых функций, неизменяемых данных и функций высшего порядка. С Java 8 она стала полноценной частью языка.
Основные инструменты:
-
Лямбда-выражения — анонимные функции
Function<Integer, Integer> square = x -> x * x; Predicate<String> isLong = s -> s.length() > 10; -
Stream API — декларативная обработка коллекций
List<String> names = Arrays.asList("John", "Alice", "Bob", "Alexandra");
List
3. **Функциональные интерфейсы** (`java.util.function`)
- `Function<T,R>` — принимает T, возвращает R
- `Predicate<T>` — принимает T, возвращает boolean
- `Consumer<T>` — принимает T, ничего не возвращает
- `Supplier<T>` — ничего не принимает, возвращает T
4. **Optional** — безопасная работа с null
```java
Optional<String> optional = Optional.ofNullable(getName());
String result = optional
.filter(s -> s.length() > 5)
.map(String::toUpperCase)
.orElse("DEFAULT");
- Records (Java 14+) — иммутабельные DTO
public record Person(String name, int age) {} // Автоматически: конструктор, equals(), hashCode(), toString()
Best practices:
- Предпочитайте неизменяемые данные
- Используйте чистые функции (без side effects)
- Комбинируйте небольшие функции в более сложные
- Избегайте изменения внешнего состояния в лямбдах
Преимущества:
- Более читаемый и выразительный код
- Упрощение параллельных вычислений
- Упрощение тестирования (чистые функции)
- Меньше ошибок, связанных с изменяемым состоянием