Java 8 - Функциональные интерфейсы
Функциональные интерфейсы демонстрируют единственную функциональность. Например, для сравнения используется интерфейс Comparable с единственным методом compareTo. В Java 8 определено множество функциональных интерфейсов, которые будут широко использоваться в лямбда-выражениях. Ниже приведен список функциональных интерфейсов, определенных в пакете java.util.Function.
Sr. No. | Интерфейс и описание |
---|---|
1 | BiConsumer<T,U> Представляет операцию, которая принимает два входных аргумента и не возвращает результата. |
2 | BiFunction<T,U,R> Представляет функцию, которая принимает два аргумента и выдает результат. |
3 | BinaryOperator<T> Представляет операцию над двумя операндами одного и того же типа, дающую результат того же типа, что и операнды. |
4 | BiPredicate<T,U> Представляет предикат (функцию с логическим значением) из двух аргументов. |
5 | BooleanSupplier Представляет поставщика результатов с логическим значением. |
6 | Consumer<T> Представляет операцию, которая принимает один входной аргумент и не возвращает результата. |
7 | DoubleBinaryOperator Представляет операцию с двумя двузначными операндами и дает двузначный результат. |
8 | DoubleConsumer Представляет операцию, которая принимает один аргумент с двойным значением и не возвращает результата. |
9 | DoubleFunction<R> Представляет функцию, которая принимает аргумент с двойным значением и возвращает результат. |
10 | DoublePredicate Представляет предикат (функция с логическим значением) одного двузначного аргумента. |
11 | DoubleSupplier Представляет поставщика результатов с двойным значением. |
12 | DoubleToIntFunction Представляет функцию, которая принимает аргумент с двойным значением и возвращает результат с целым числом. |
13 | DoubleToLongFunction Представляет функцию, которая принимает аргумент с двойным значением и возвращает результат с длинным значением. |
14 | DoubleUnaryOperator Представляет операцию с одним двузначным операндом, которая дает двузначный результат. |
15 | Function<T,R> Представляет функцию, которая принимает один аргумент и выдает результат. |
16 | IntBinaryOperator Представляет операцию над двумя операндами с целым значением и дает результат с целым значением. |
17 | IntConsumer Представляет операцию, которая принимает один аргумент с целым значением и не возвращает результата. |
18 | IntFunction<R> Представляет функцию, которая принимает аргумент с целым числом значений и выдает результат. |
19 | IntPredicate Представляет предикат (функцию с логическим значением) одного аргумента с целым значением. |
20 | IntSupplier Представляет поставщика результатов с целочисленным значением. |
21 год | IntToDoubleFunction Представляет функцию, которая принимает аргумент с целым числом значений и дает результат с двойным значением. |
22 | IntToLongFunction Представляет функцию, которая принимает аргумент с целым значением и возвращает результат с длинным значением. |
23 | IntUnaryOperator Представляет операцию с одним операндом с целым значением, которая дает результат с целым значением. |
24 | LongBinaryOperator Представляет операцию над двумя операндами с длинными значениями и дает результат с длинными значениями. |
25 | LongConsumer Представляет операцию, которая принимает один аргумент с длинным значением и не возвращает результата. |
26 | LongFunction<R> Представляет функцию, которая принимает аргумент с длинным значением и выдает результат. |
27 | LongPredicate Представляет предикат (функцию с логическим значением) одного длинного аргумента. |
28 | LongSupplier Представляет поставщика долгосрочных результатов. |
29 | LongToDoubleFunction Представляет функцию, которая принимает аргумент с длинным значением и возвращает результат с двойным значением. |
30 | LongToIntFunction Представляет функцию, которая принимает аргумент с длинным значением и возвращает результат с целым значением. |
31 год | LongUnaryOperator Представляет операцию с одним длинным операндом, которая приводит к длинному результату. |
32 | ObjDoubleConsumer<T> Представляет операцию, которая принимает аргумент с объектным значением и аргумент с двойным значением и не возвращает результата. |
33 | ObjIntConsumer<T> Представляет операцию, которая принимает аргумент со значением объекта и аргумент с целым значением и не возвращает результата. |
34 | ObjLongConsumer<T> Представляет операцию, которая принимает аргумент с объектным значением и аргумент с длинным значением и не возвращает результата. |
35 год | Predicate<T> Представляет предикат (функцию с логическим значением) одного аргумента. |
36 | Supplier<T> Представляет поставщика результатов. |
37 | ToDoubleBiFunction<T,U> Представляет функцию, которая принимает два аргумента и выдает двузначный результат. |
38 | ToDoubleFunction<T> Представляет функцию, которая возвращает результат с двойным значением. |
39 | ToIntBiFunction<T,U> Представляет функцию, которая принимает два аргумента и выдает результат со значением типа int. |
40 | ToIntFunction<T> Представляет функцию, которая возвращает результат с целым числом значений. |
41 год | ToLongBiFunction<T,U> Представляет функцию, которая принимает два аргумента и возвращает результат с длинным значением. |
42 | ToLongFunction<T> Представляет функцию, которая возвращает результат с длинным значением. |
43 | UnaryOperator<T> Представляет операцию с одним операндом, которая дает результат того же типа, что и его операнд. |
Пример функционального интерфейса
Интерфейс Predicate <T> - это функциональный интерфейс с методом test (Object) для возврата логического значения. Этот интерфейс означает, что объект проверяется на истинность или ложь.
Создайте следующую программу Java с помощью любого редактора по вашему выбору, например, C: \> JAVA.
Java8Tester.java
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 is passed as parameter to test method of Predicate interface
// test method will always return true no matter what value n has.
System.out.println("Print all numbers:");
//pass n as parameter
eval(list, n->true);
// Predicate<Integer> predicate1 = n -> n%2 == 0
// n is passed as parameter to test method of Predicate interface
// test method will return true if n%2 comes to be zero
System.out.println("Print even numbers:");
eval(list, n-> n%2 == 0 );
// Predicate<Integer> predicate2 = n -> n > 3
// n is passed as parameter to test method of Predicate interface
// test method will return true if n is greater than 3.
System.out.println("Print numbers greater than 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 + " ");
}
}
}
}
Здесь мы передали интерфейс Predicate, который принимает единственный ввод и возвращает логическое значение.
Проверить результат
Скомпилируйте класс, используя javac компилятор следующим образом -
C:\JAVA>javac Java8Tester.java
Теперь запустите Java8Tester следующим образом -
C:\JAVA>java Java8Tester
Он должен выдать следующий результат -
Print all numbers:
1
2
3
4
5
6
7
8
9
Print even numbers:
2
4
6
8
Print numbers greater than 3:
4
5
6
7
8
9