Java 8 Функция Интерфейс
Функция интерфейса (функциональный интерфейс) представляет собой метод, имеющий общий интерфейс.
Интерфейс Функция может быть неявно преобразован в лямбда-выражения.
Интерфейс Функция может поддерживать существующие функции дружественный лямбда.
Перед JDK 1.8 имеет функцию интерфейса:
- java.lang.Runnable
- java.util.concurrent.Callable
- java.security.PrivilegedAction
- java.util.Comparator
- java.io.FileFilter
- java.nio.file.PathMatcher
- java.lang.reflect.InvocationHandler
- java.beans.PropertyChangeListener
- java.awt.event.ActionListener
- javax.swing.event.ChangeListener
JDK 1.8 Добавленный интерфейс функции:
- java.util.function
java.util.function Он содержит много классов, функций для поддержки программирования Java, этот пакет функциональных интерфейсов:
Нет. | Интерфейс и Описание |
---|---|
1 | BiConsumer <T, U> Она представляет собой операцию, которая принимает два входных параметров и не возвращает никаких результатов |
2 | BiFunction <T, U, R> Она представляет собой метод принимает два входных параметра, и возвращает результат |
3 | BinaryOperator <T> Действуя от имени оператора в двух из того же типа операции, и оператор возвращает один и тот же тип результатов |
4 | BiPredicate <T, U> Она представляет собой способ Логическое значение два параметра |
5 | BooleanSupplier Он представляет собой логическое значение результата поставщика |
6 | Потребитель <T> Представляет принимает входной параметр и никакой операции возврата |
7 | DoubleBinaryOperator Он действует от имени двух двойных значений пульта оператора, и возвращает результаты двойного значения. |
8 | DoubleConsumer Принимает операцию от имени двойного значения параметра, и не возвращает результат. |
9 | DoubleFunction <R> Прием от имени метода двойного параметра, и возвращает результат |
10 | DoublePredicate Он представляет собой логическое значение параметра имеет метод двойного значения |
11 | DoubleSupplier Значение представляет собой двойную структуру поставщика |
12 | DoubleToIntFunction Принимает входной сигнал двойного типа и возвращает результат Int. |
13 | DoubleToLongFunction Принимает входной сигнал двойного типа и возвращает длинный тип результата |
14 | DoubleUnaryOperator Принимает параметр для того же типа двойного, тип возвращаемого значения также дважды. |
15 | Функция <T, R> Принимает входной параметр и возвращает результат. |
16 | IntBinaryOperator Принимает два параметра с тем же типом Int, тип возвращаемого значения также Int. |
17 | IntConsumer Принимает входные параметры INT, возвращаемого значения. |
18 | IntFunction <R> Принимает входной параметр типа INT, и возвращает результат. |
19 | IntPredicate : Принимает входной параметр Int и возвращает логическое значение результата. |
20 | IntSupplier Никакие аргументы и не возвращает результат Int. |
21 | IntToDoubleFunction Принимает входной сигнал типа INT, и возвращает результат типа Double. |
22 | IntToLongFunction Согласует ввод типа Int и возвращает длинный тип результата. |
23 | IntUnaryOperator Принимает параметр для того же типа Int, тип возвращаемого значения также Int. |
24 | LongBinaryOperator Она принимает два параметра с тем же типом длинного, тип возвращаемого значения надолго. |
25 | LongConsumer Это занимает много тип входных параметров, возвращаемого значения. |
26 | LongFunction <R> Для того, чтобы принять длинный тип входных параметров и возвращает результат. |
27 | LongPredicate R принимает длинный входной параметр и возвращает логическое значение результатов типа. |
28 | LongSupplier Нет параметров и возвращает значение результата типа долго. |
29 | LongToDoubleFunction Для того, чтобы принять длинный тип входных данных и возвращает результат типа Double. |
30 | LongToIntFunction Для того, чтобы принять длинный тип входных данных и возвращает результат Int. |
31 | LongUnaryOperator Он принимает параметр для того же типа длинный, тип возвращаемого значения надолго. |
32 | ObjDoubleConsumer <T> Принимает тип объекта и двойной тип входных параметров, возвращаемого значения. |
33 | ObjIntConsumer <T> Принимает тип объекта и параметры ввода INT, возвращаемого значения. |
34 | ObjLongConsumer <T> Принимает тип объекта и длинный тип входных параметров, возвращаемого значения. |
35 | Предикат <T> Принимает входной параметр и возвращает Булев результат. |
36 | Поставщик <T> Нет параметров и возвращает результат. |
37 | ToDoubleBiFunction <T, U> Он принимает два входных параметра и возвращает результат типа двойного |
38 | ToDoubleFunction <T> Принимает входной параметр и возвращает результат типа двойного |
39 | ToIntBiFunction <T, U> Он принимает два входных параметра и возвращает результат типа Int. |
40 | ToIntFunction <T> Принимает входной параметр и возвращает результат типа Int. |
41 | ToLongBiFunction <T, U> Он принимает два входных параметра и возвращает длинный тип результата. |
42 | ToLongFunction <T> Принимает входной параметр и возвращает длинный тип результата. |
43 | UnaryOperator <T> Принять параметр типа T, тип возвращаемого значения для T. |
Функциональный экземпляр интерфейса
Предикат <T> интерфейс представляет собой функциональный интерфейс, который принимает входной параметр T, возвращает логический результат.
Интерфейс содержит несколько методов по умолчанию будут объединены в другие сложные Predicate логики (например: AND, OR, NOT).
Этот интерфейс используется для проверки объектов являются истинными или ложными.
Мы можем следующими примерами (Java8Tester.java), чтобы понять интерфейс функции предиката <T> использовать:
import java.util.Arrays; import java.util.List; import java.util.function.Predicate; public class 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 是一个参数传递到 Predicate 接口的 test 方法 // n 如果存在则 test 方法返回 true System.out.println("输出所有数据:"); // 传递参数 n eval(list, n->true); // Predicate<Integer> predicate1 = n -> n%2 == 0 // n 是一个参数传递到 Predicate 接口的 test 方法 // 如果 n%2 为 0 test 方法返回 true System.out.println("输出所有偶数:"); eval(list, n-> n%2 == 0 ); // Predicate<Integer> predicate2 = n -> n > 3 // n 是一个参数传递到 Predicate 接口的 test 方法 // 如果 n 大于 3 test 方法返回 true System.out.println("输出大于 3 的所有数字:"); eval(list, n-> n > 3 ); } public static void eval(List<Integer> list, Predicate<Integer> predicate) { 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