Учебники

Java 8 — функциональные интерфейсы

Функциональные интерфейсы имеют единую функциональность для демонстрации. Например, для сравнения используется сопоставимый интерфейс с единственным методом «CompareTo». В Java 8 определено множество функциональных интерфейсов, которые будут широко использоваться в лямбда-выражениях. Ниже приведен список функциональных интерфейсов, определенных в пакете java.util.Function.

Sr.No. Интерфейс и описание
1

BiConsumer <T, U>

Представляет операцию, которая принимает два входных аргумента и не возвращает результата.

2

BiFunction <Т, U, R>

Представляет функцию, которая принимает два аргумента и выдает результат.

3

BinaryOperator <Т>

Представляет операцию над двумя операндами одного типа, производя результат того же типа, что и операнды.

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

Представляет операцию, которая принимает один аргумент с внутренним значением и не возвращает результата.

18

IntFunction <R>

Представляет функцию, которая принимает аргумент с внутренним значением и выдает результат.

19

IntPredicate

Представляет предикат (булевозначную функцию) одного аргумента с внутренним значением.

20

IntSupplier

Представляет поставщика ценных результатов.

21

IntToDoubleFunction

Представляет функцию, которая принимает аргумент с внутренним значением и выдает результат с двойным значением.

22

IntToLongFunction

Представляет функцию, которая принимает аргумент с внутренним значением и выдает долгосрочное значение.

23

IntUnaryOperator

Представляет операцию с одним int-значным операндом, который создает int-значный результат.

24

LongBinaryOperator

Представляет операцию над двумя долгосрочными операндами и дает долгосрочное значение.

25

LongConsumer

Представляет операцию, которая принимает один длинный аргумент и не возвращает результата.

26

LongFunction <R>

Представляет функцию, которая принимает длиннозначный аргумент и выдает результат.

27

LongPredicate

Представляет предикат (булевозначная функция) одного длиннозначного аргумента.

28

LongSupplier

Представляет поставщика долгосрочных результатов.

29

LongToDoubleFunction

Представляет функцию, которая принимает длиннозначный аргумент и выдает двузначный результат.

30

LongToIntFunction

Представляет функцию, которая принимает длиннозначный аргумент и выдает int-значный результат.

31

LongUnaryOperator

Представляет операцию с одним длиннозначным операндом, который приводит к длиннозначному результату.

32

ObjDoubleConsumer <Т>

Представляет операцию, которая принимает объектнозначный и двухзначный аргумент и не возвращает результата.

33

ObjIntConsumer <Т>

Представляет операцию, которая принимает объектно-значимый и int-значимый аргументы и не возвращает результата.

34

ObjLongConsumer <Т>

Представляет операцию, которая принимает объектный и длинный аргумент и не возвращает результата.

35

Предиката <Т>

Представляет предикат (булевозначная функция) одного аргумента.

36

Поставщик <T>

Представляет поставщика результатов.

37

ToDoubleBiFunction <T, U>

Представляет функцию, которая принимает два аргумента и выдает двузначный результат.

38

ToDoubleFunction <Т>

Представляет функцию, которая выдает двузначный результат.

39

ToIntBiFunction <T, U>

Представляет функцию, которая принимает два аргумента и выдает целочисленный результат.

40

ToIntFunction <Т>

Представляет функцию, которая выдает int-значный результат.

41

ToLongBiFunction <T, U>

Представляет функцию, которая принимает два аргумента и выдает долгосрочное значение.

42

ToLongFunction <Т>

Представляет функцию, которая выдает долгосрочное значение.

43

UnaryOperator <Т>

Представляет операцию с одним операндом, которая выдает результат того же типа, что и его операнд.

BiConsumer <T, U>

Представляет операцию, которая принимает два входных аргумента и не возвращает результата.

BiFunction <Т, U, R>

Представляет функцию, которая принимает два аргумента и выдает результат.

BinaryOperator <Т>

Представляет операцию над двумя операндами одного типа, производя результат того же типа, что и операнды.

BiPredicate <T, U>

Представляет предикат (булевозначная функция) двух аргументов.

BooleanSupplier

Представляет поставщика булевозначных результатов.

Потребитель <T>

Представляет операцию, которая принимает один входной аргумент и не возвращает результата.

DoubleBinaryOperator

Представляет операцию над двумя двухзначными операндами, которая приводит к получению двойного результата.

DoubleConsumer

Представляет операцию, которая принимает один аргумент с двойным значением и не возвращает результата.

DoubleFunction <R>

Представляет функцию, которая принимает аргумент с двойным значением и выдает результат.

DoublePredicate

Представляет предикат (булевозначная функция) одного аргумента с двойным значением.

DoubleSupplier

Представляет поставщика двойных результатов.

DoubleToIntFunction

Представляет функцию, которая принимает аргумент с двумя значениями и выдает результат со значениями типа int.

DoubleToLongFunction

Представляет функцию, которая принимает аргумент с двумя значениями и выдает результат с длинными значениями.

DoubleUnaryOperator

Представляет операцию с одним двойным операндом, который приводит к двойному результату.

Функция <T, R>

Представляет функцию, которая принимает один аргумент и выдает результат.

IntBinaryOperator

Представляет операцию над двумя int-значными операндами и выдает int-значный результат.

IntConsumer

Представляет операцию, которая принимает один аргумент с внутренним значением и не возвращает результата.

IntFunction <R>

Представляет функцию, которая принимает аргумент с внутренним значением и выдает результат.

IntPredicate

Представляет предикат (булевозначную функцию) одного аргумента с внутренним значением.

IntSupplier

Представляет поставщика ценных результатов.

IntToDoubleFunction

Представляет функцию, которая принимает аргумент с внутренним значением и выдает результат с двойным значением.

IntToLongFunction

Представляет функцию, которая принимает аргумент с внутренним значением и выдает долгосрочное значение.

IntUnaryOperator

Представляет операцию с одним int-значным операндом, который создает int-значный результат.

LongBinaryOperator

Представляет операцию над двумя долгосрочными операндами и дает долгосрочное значение.

LongConsumer

Представляет операцию, которая принимает один длинный аргумент и не возвращает результата.

LongFunction <R>

Представляет функцию, которая принимает длиннозначный аргумент и выдает результат.

LongPredicate

Представляет предикат (булевозначная функция) одного длиннозначного аргумента.

LongSupplier

Представляет поставщика долгосрочных результатов.

LongToDoubleFunction

Представляет функцию, которая принимает длиннозначный аргумент и выдает двузначный результат.

LongToIntFunction

Представляет функцию, которая принимает длиннозначный аргумент и выдает int-значный результат.

LongUnaryOperator

Представляет операцию с одним длиннозначным операндом, который приводит к длиннозначному результату.

ObjDoubleConsumer <Т>

Представляет операцию, которая принимает объектнозначный и двухзначный аргумент и не возвращает результата.

ObjIntConsumer <Т>

Представляет операцию, которая принимает объектно-значимый и int-значимый аргументы и не возвращает результата.

ObjLongConsumer <Т>

Представляет операцию, которая принимает объектный и длинный аргумент и не возвращает результата.

Предиката <Т>

Представляет предикат (булевозначная функция) одного аргумента.

Поставщик <T>

Представляет поставщика результатов.

ToDoubleBiFunction <T, U>

Представляет функцию, которая принимает два аргумента и выдает двузначный результат.

ToDoubleFunction <Т>

Представляет функцию, которая выдает двузначный результат.

ToIntBiFunction <T, U>

Представляет функцию, которая принимает два аргумента и выдает целочисленный результат.

ToIntFunction <Т>

Представляет функцию, которая выдает int-значный результат.

ToLongBiFunction <T, U>

Представляет функцию, которая принимает два аргумента и выдает долгосрочное значение.

ToLongFunction <Т>

Представляет функцию, которая выдает долгосрочное значение.

UnaryOperator <Т>

Представляет операцию с одним операндом, которая выдает результат того же типа, что и его операнд.

Пример функционального интерфейса

Интерфейс Predicate <T> — это функциональный интерфейс с методом test (Object) для возврата логического значения. Этот интерфейс означает, что объект проверен на истинность или ложь.

Создайте следующую Java-программу, используя любой редактор по вашему выбору, например, в C: \> JAVA.

Java8Tester.java

Live Demo

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, который принимает один вход и возвращает Boolean.

Проверьте результат

Скомпилируйте класс с помощью компилятора javac следующим образом:

C:\JAVA>javac Java8Tester.java

Теперь запустите Java8Tester следующим образом —

C:\JAVA>java Java8Tester

Он должен произвести следующий вывод —