Какие встроенные функциональные интерфейсы в Java ты знаешь?

«Какие встроенные функциональные интерфейсы в Java ты знаешь?» — вопрос из категории Java Core, который задают на 27% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Основные функциональные интерфейсы находятся в пакете 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).