Функциональный интерфейс-это интерфейс, который имеет только один абстрактный метод, но может иметь несколько неабстроктных методов.
Функциональные интерфейсы могут быть косвенно преобразованы в выражения Lambda.
Функциональные интерфейсы могут поддерживать Lambdas Friendly благодаря существующим функциям.
представлять
Функциональные интерфейсы на самом деле являются абстрактным интерфейсным классом. Следующие функциональные интерфейсы были найдены до Java 8.
java.lang.runnablejava.util.concurrent.callablejava.util.comparator
и т. д...
Как использовать
Фактически, класс интерфейса, упомянутый выше, должен быть изменен только с помощью аннотации функционала и становится функциональным интерфейсом в Java. Например, определение разбираемого интерфейса в JDK
@FunctionalInterfacePublic Interface Callable <v> {v call () бросает исключение;}Это так просто.
Теперь давайте поговорим о новом интерфейсе функции, добавленном в Java 8. Вот его определение
// T - входящий параметр // r - параметр возврата @functionalInterfacepubbublic function <t, r> {r Apply (t t); по умолчанию <v> function <v, r> compose (function <? Super v ,? extends t> перед {objects.requirenonnull (до); return (v v v) -> Apply (до. Apply (v));} default <v> function <T, v> andthen (function <? Super r,? extends v> after) {objects.requirEnnonlon (после) After.Apply (Apply (t));Это можно понимать как указатель функции на языке C (личное мнение).
В фактическом использовании метод применения широко используется. Compose/и Then в основном используется в сценариях, где выполняется более двух функциональных интерфейсов и последовательности выполнения.
В конкретном бизнес -коде я обычно использую его в сочетании с Bifuncton/поставщиком. Бифункция поддерживает 2 параметра, функция поддерживает только один параметр. Поставщик может быть использован для хранения конкретных необходимых значений и получения их через GET.
пример
Ссылки на код, над которым вы обычно работаете. Этот пример в основном позволяет избежать множества условий суждения, которые вызывают раздутый код. В то же время та же самая бизнес -логика может быть абстрагирована из интерфейса функции, чтобы код можно было повторно использовать в нескольких местах. Конкретный код выглядит следующим образом.
Function <Object, integer> actionTest1 = (object) -> {// Logic return 0;}; function <Object, Integer> actionTest2 = (Object) -> {// Logic return 0;}; public Pulfier <map <integer, function <Object, integer >>> actionUplier = () -> {map <inteeger, function, integer >>> mapps => mapps <). Hashmap <> (); maps.put (1, actionTest1); maps.put (2, actionTest2); return maps;}; // Использовать публичный тест void (int type, объект объекта) {необязательный. Офнуллебельный (actionupplier.get (). get (type)). ifpresent (x -> x.apply (v, object)); // if/else logic if (type == 1) {// test1 logic} else if (type == 2) {// test2 logic}}Суммировать
Лично я считаю, что в сценариях, где есть больше суждений о филиалах бизнес -логики, более подходит для использования функции, и есть следующие преимущества.
Пример функционального интерфейса
Интерфейс Predicate <t> - это функциональный интерфейс, который принимает входной параметр t и возвращает логический результат.
Этот интерфейс содержит множество методов по умолчанию, чтобы объединить предикат в другую сложную логику (например: Versus или, не).
Этот интерфейс используется для проверки объекта истинна или ложь.
Мы можем понять использование предиката функционального интерфейса <t> через следующий пример (java8tester.java):
Java8tester.java file import java.util.arrays; import java.util.list; import java.util.function.predicate; открытый класс java8tester {public static void main (string args []) {list <Integer> list = arrays.aslist (1, 2, 3, 4, 5, 6, 7, 8, 9); // Predicate <Integer> predicate = n -> true // n -это метод испытаний, который передает аргументы в интерфейс Predicat // n Если есть, метод испытания возвращает true system.out.println («Out All Data:»); // Передача параметра n eval (list, n-> true); // Predicate <Integer> прогноз1 = n -> n%2 == 0 // n -это метод испытаний, который передает параметр в интерфейс Predicate // Если n%2 -0 метод испытания возвращает true system.out.println («out out ровные числа:»); eval (список, n-> n%2 == 0); // Predicate <Integer> прогноз2 = n -> n> 3 // n -это метод испытаний, который передает параметр к интерфейсу предиката // если n больше 3 метода испытаний возвращает истинную систему.out.println («Выходные числа больше 3:»); eval (список, n-> n> 3); } public static void eval (список <integer> list, predicate <Integer> прогноз) {for (integer n: list) {if (predicate.test (n)) {System.out.println (n + ""); }}}}Выполните приведенный выше сценарий, и результат вывода:
$ javac java8tester.java
$ java java8tester
Вывод всех данных:
1
2
3
4
5
6
7
8
9
Выводить все четные числа:
2
4
6
8
Выводит все числа больше 3:
4
5
6
7
8
9
Суммировать
Выше приведено функциональный интерфейс функционального интерфейса Java 8 и функциональный интерфейс, представленные редактором. Я надеюсь, что это будет полезно для всех. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит всем вовремя. Большое спасибо за вашу поддержку сайту wulin.com!