1. Что такое функциональный интерфейс:
Функциональный интерфейс — это интерфейс, подходящий для сценариев функционального программирования. Воплощением функционального программирования на Java является Lambda, поэтому функциональные интерфейсы — это интерфейсы, которые могут использоваться Lambda. Только гарантируя, что в интерфейсе есть один и только один абстрактный метод, Lambda в Java может быть выведена плавно. Может быть несколько неабстрактных методов. Чтобы предотвратить добавление другими функциями интерфейса в этот интерфейс, что приведет к реализации нескольких функций интерфейса и превращению его в «нефункциональный интерфейс», вы можете добавить к интерфейсу аннотацию @FunctionalInterface, чтобы другие не могли добавлять новые интерфейсы в интерфейс. это. функция.
FunctionalInterface на китайском языке называется функциональным интерфейсом. Это одна из новых возможностей Java. Так называемый функциональный интерфейс — это интерфейс (Interface), который может иметь только один абстрактный метод. 2. Какова функция FunctionalInterface?
В качестве одной из новых функций Java он в основном идентифицирует определенный тип интерфейса. Если он соответствует вышеуказанным характеристикам (интерфейс, который может иметь только один абстрактный метод), вы можете использовать аннотацию @FunctionalInterface.
Обычно он используется в сочетании с лямбда-выражениями.
2. Четыре основные функции функционального интерфейса:
1. Потребительский интерфейс. Потребитель имеет параметры и не имеет возвращаемого значения.
@FunctionalInterface public interface Consumer<T> { /** * Performs this operation on the given argument. * Params:t- the input argument */ void accept(T t); }
2. Интерфейс типа поставки: поставщик не имеет параметров, возвращает значение и используется для предоставления источников данных.
@FunctionalInterface public interface Supplier<T> { /** * Gets a result. * Returns:a result */ T get(); }
3. Функциональный интерфейс: функция. Наиболее типичным является функция, которая имеет параметры и возвращаемые значения. Она принимает параметр типа T и возвращает возвращаемое значение типа R.
@FunctionalInterface public interface Function<T, R> { /** * Applies this function to the given argument. * Params: t- the function argument * Returns: the function result */ R apply(T t); }
4. Интерфейс предикатов. Предикат имеет параметры и возвращаемое значение. Возвращаемое значение имеет логический тип и используется для определения того, выполняется ли определенное условие. Часто используется для просеивающих операций.
@FunctionalInterface public interface Predicate<T> { /** * Evaluates this predicate on the given argument. * Params: t - the input argument * Returns: true if the input argument matches the predicate, otherwise false */ boolean test(T t); }
3. Вызовы реализации четырех основных функций
//Реализуем четыре основные функции Consumer<String> consumer = (str) -> { System.out.println(str); };
Supplier<String> supplier = () -> {
return «Я интерфейс типа питания»;
};
Function<String, String> function = (str) -> {
return "hello," + str;
};
Predicate<Integer> predicate = (i) -> {
return i > 10;
};
void conDemo(String str, Consumer<String> consumer) {//Передача лямбда-выражения в качестве параметра
consumer.accept(str);
}
String supDemo(Supplier<String> supplier) {
return supplier.get();
}
String funDemo(String str2, Function<String, String> function) {
return function.apply(str2);
}
boolean preDemo(Integer i, Predicate<Integer> predicate) {
return predicate.test(i);
}
String str = «Тип потребления интерфейс»;
@Test
void conDemo2() {
conDemo(str, потребитель);//Результат печати: тип интерфейса потребителя
}
@Test
void supDemo2() {
System.out.println(supDemo(supplier));//Результат печати: я являюсь интерфейсом типа поставки
}
String str2 = «Я — Функциональный интерфейс»;
@Test
void funDemo2() {
System.out.println(funDemo(str2, function));//Результат печати: здравствуйте, я Functionstyle интерфейс
}
Integer i = 12;
@Test
void preDemo2() {
System.out.println(preDemo(i, предикат));//Результат печати: true
}
4. Другие функциональные интерфейсы:
Runnable:
@FunctionalInterface public interface Runnable { public abstract void run(); }
Callable:
@FunctionalInterface public interface Callable<V> { V call() throws Exception; }
@FunctionalInterface public interface Comparator<T> { int compare(T o1, T o2); }