Ответ
Основные функциональные интерфейсы находятся в пакете java.util.function. Они являются целевыми типами для лямбда-выражений и ссылок на методы.
| Интерфейс | Сигнатура метода | Назначение | Пример использования |
|---|---|---|---|
Predicate<T> |
boolean test(T t) |
Проверка условия (фильтрация). | .filter(s -> s.isEmpty()) |
Function<T, R> |
R apply(T t) |
Преобразование объекта из типа T в тип R. | .map(s -> s.length()) |
Consumer<T> |
void accept(T t) |
Выполнение действия над объектом (побочный эффект). | .forEach(System.out::println) |
Supplier<T> |
T get() |
Поставка (генерация) значения. | () -> new ArrayList<>() |
UnaryOperator<T> |
T apply(T t) |
Частный случай Function<T, T> для операций над одним типом. |
.replaceAll(s -> s.toUpperCase()) |
BiFunction<T, U, R> |
R apply(T t, U u) |
Функция, принимающая два аргумента. | (a, b) -> a + b |
BinaryOperator<T> |
T apply(T t1, T t2) |
Частный случай BiFunction<T,T,T>. |
.reduce((a, b) -> a + b) |
Почему это важно: Эти интерфейсы стандартизируют передачу поведения, что является основой функционального программирования в Java и активно используется в Stream API и многопоточности (CompletableFuture).