Функциональный интерфейс — это интерфейс, содержащий только один абстрактный метод. Он может иметь любое количество default или static методов.
Применение:
Примеры встроенных функциональных интерфейсов (пакет java.util.function):
Consumer<T>: Принимает аргумент, ничего не возвращает (void accept(T t)).Supplier<T>: Ничего не принимает, возвращает значение (T get()).Predicate<T>: Принимает аргумент, возвращает булево значение (boolean test(T t)).Function<T, R>: Принимает аргумент типа T, возвращает значение типа R (R apply(T t)).UnaryOperator<T>: Наследник Function<T, T>, принимает и возвращает значение одного типа (T apply(T t)).BinaryOperator<T>: Наследник BiFunction<T, T, T>, принимает два значения одного типа и возвращает значение того же типа (T apply(T t1, T t2)).Аннотация @FunctionalInterface:
Пример пользовательского функционального интерфейса:
java
Пример использования с лямбда-выражением:
java
Ключевая концепция —SAM (Single Abstract Method) Type. Функциональный интерфейс по сути является SAM-типом, что позволяет сопоставлять его с лямбда-выражениями и ссылками на методы.