Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 24226|Ответ: 1

[Источник] Подробное объяснение распространённых функциональных интерфейсов (делегатов) в Java

[Скопировать ссылку]
Опубликовано 16.09.2021 9:28:21 | | | |
API JDK 1.8 включает множество встроенных функциональных интерфейсов, таких как интерфейсы Comparator или Runnable, широко используемые в старой Java, которые добавляют @FunctionalInterface аннотаций, чтобы их можно было использовать на лямбдах. Теперь давайте действительно разберёмся с точки зрения общих функций в Function.

имятипописание
ПотребительПотребитель< T >Принимает T объектов, не возвращает значения
ПредикатПредикат< T >Получает объект T и возвращает булев
ФункцияФункция< T, R >Получает объект T и возвращает объект R
ПоставщикПоставщик< T >Предоставить T-объекты (например, растения) без принятия значений
UnaryOperatorUnaryOperatorПринимает объект T и возвращает объект T
Бинарный операторБинарный операторПримите два объекта T и верните объекты T


Интерфейс, обозначенный как FunctionalInterface, называется функциональным интерфейсом, который может иметь только один пользовательский метод, но может включать методы, унаследованные от класса объектов. Если у интерфейса только один метод, компилятор будет считать его функциональным. Независимо от того, является ли это функциональным интерфейсом, необходимо отметить следующие моменты:


  • Аннотация может быть помечена только на интерфейсах словом «Существует только один абстрактный метод».
  • Статические и стандартные методы в интерфейсе JDK8 не являются абстрактными методами.
  • Интерфейс по умолчанию наследует java.lang.Object, поэтому если в интерфейсе указано, что объявление переопределяет метод в объекте, он не считается абстрактным методом.
  • Аннотация не требуется, и если интерфейс соответствует определению «функционального интерфейса», это не влияет на добавление аннотации или нет. Кроме того, аннотация позволяет компилятору лучше проверять. Если вы пишете нефункциональный интерфейс, но добавляете @FunctionInterface, компилятор сообщает об ошибке.
  • Определение двух пользовательских методов в одном интерфейсе приведёт к аннотации Invalid '@FunctionalInterface'; FunctionalInterfaceTest не является ошибкой функционального интерфейса.


java.util.function Он содержит ряд классов для поддержки функционального программирования Java, а функциональные интерфейсы в этом пакете следующие:

порядковый номер
Интерфейс и описание
1BiConsumer<T,U>
Представляет действие, принимающее два входных параметра и не возвращающее результатов
2BiFunction<T,U,R>
Представляет метод, который принимает два входных параметра и возвращает результат
3Бинарный оператор<T>
представляет действие, действующее на два оператора одного типа, и возвращает результат одного и того же типа оператора
4Би-предикат<T,U>
Представляет двухпараметрический метод булевых значений
5BooleanSupplier
Представляет поставщика результата булевого значения
6Потребитель<T>
Представляет операцию, которая принимает входный параметр и ничего не возвращает
7Двойной Бинарный Оператор
представляет действие, действующее на два оператора с двойным значением, и возвращает результат двойного значения.
8DoubleConsumer
Представляет действие, которое принимает параметр двойного значения и не возвращает результат.
9DoubleFunction<R>
Представляет метод, который принимает двойной параметр и возвращает результат
10Двойной предикат
Представляет метод булевых значений с параметром двойного значения
11DoubleSupplier
Представляет поставщика структуры с двойным значением
12DoubleToIntFunction
Принимает двойной тип входа и возвращает результат int-типа.
13DoubleToLongFunction
Принимает вход двойного типа и возвращает результат длинного типа
14DoubleUnaryOperator
Примите параметр того же типа double, и тип возвращаемого значения также двойный.
15Функция<T,R>
Принимает входный параметр, возвращает результат.
16IntBinaryOperator
Принимаем оба параметра типа int и return value type int.
17IntConsumer
Принимает входной параметр типа int без возвратного значения.
18IntFunction<R>
Принимает входной параметр типа int и возвращает результат.
19IntPredicate
: Принимает входной параметр int и возвращает булев результат.
20IntSupplier
Нет параметров, возвращает результат типа int.
21IntToDoubleFunction
Принимает вход типа int и возвращает результат двойного типа.
22IntToLongFunction
Принимает вход int-типа и возвращает результат длинного типа.
23IntUnaryOperator
Принимаем параметр типа int, и возвращаем значение типа также int.
24LongBinaryOperator
Примите оба параметра: тип long и тип возвратного значения как long.
25LongConsumer
Примите входный параметр типа long без возвратного значения.
26LongFunction<R>
Принимает входной параметр длинного типа и возвращает результат.
27Длинный предикат
R принимает длинный входный параметр и возвращает результат булевого типа.
28LongSupplier
Нет параметра, возвращает результат типа long.
29LongToDoubleFunction
Принимает ввод с длинным типом и возвращает результат с двойным типом.
30LongToIntFunction
Принимает ввод длинного типа и возвращает результат int-типа.
31LongUnaryOperator
Примите параметр того же типа как long, и верните значение типа также long.
32ObjDoubleConsumer<T>
Примите тип объекта и двойной входной параметр без возвратного значения.
33ObjIntConsumer<T>
Принимайте входные параметры типа object и type int без возвратного значения.
34ObjLongConsumer<T>
Принимает входные параметры типа объекта и типа длинного без возврата значений.
35Предикат<T>
Принимает входной параметр и возвращает булевый результат.
36Поставщик<T>
Нет параметров, результат показывается.
37ToDoubleBiFunction<T,U>
Принимает два входных параметра и возвращает результат двойного типа
38ToDoubleFunction<T>
Принимает входный параметр и возвращает результат двойного типа
39ToIntBiFunction<T,U>
Принимаем два входных параметра и возвращаем результат типа int.
40ToIntFunction<T>
Примите входной параметр и верните результат типа int.
41ToLongBiFunction<T,U>
Примите два входных параметра и получите результат длинного типа.
42ToLongFunction<T>
Примите входный параметр и получите результат длинного типа.
43UnaryOperator<T>
Примите параметр типа T и верните значение типа T.


ЯФункциональный интерфейс в Java — это делегат в .NET/C#, передайте метод как параметр следующим образом:

Введение к делегатам C# (делегат, Действие, Func, предикат)
https://www.itsvse.com/thread-4658-1-1.html

Функции Общие методы и практики

//将Function对象应用到输入的参数上,然后返回计算结果。
R apply (T t);

Хотя Function< T, R > принимать T объектов, возвращать R объекты и только один объект для получения и возврата, в сочетании с кортежами можно получить множество входящих и возвращающихся значений, см.:

Использование кортежей на Яве
https://www.itsvse.com/thread-10055-1-1.html

Пример 1: Передайте два значения и суммируем их

Можно использовать простые письма и лямбда-выражения, код таков:





Пример 2:

и метод Then



Метод сочинения



Полный код



Результаты возврата



(Конец)




Предыдущий:Решение исключений Java FeignClient Interface для нескольких одинаковых имён сервисов
Следующий:Maven Project \target\classes\META-INF\MANIFEST. MF (система...
Опубликовано 19.09.2021 19:34:22 |
Java тоже искала, хотя она не используется
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com