Ответ
В Java функциональное программирование реализуется через лямбда-выражения, функциональные интерфейсы и Stream API.
1. Лямбда-выражения
Позволяют передавать функции как аргументы:
Runnable task = () -> System.out.println("Hello, FP!");
2. Функциональные интерфейсы
Интерфейсы с одним абстрактным методом (@FunctionalInterface):
Function<Integer, Integer> square = x -> x * x;
System.out.println(square.apply(5)); // 25
3. Stream API
Обработка коллекций в функциональном стиле:
List<Integer> numbers = Arrays.asList(1, 2, 3);
List<Integer> squares = numbers.stream()
.map(x -> x * x)
.collect(Collectors.toList());
Также есть методы по умолчанию в интерфейсах и ссылки на методы (ClassName::method).