Java 8 - 函数式接口


函数式接口具有单一的功能来展示。例如,具有单个方法“compareTo”的 Comparable 接口用于比较目的。Java 8 定义了许多函数式接口,广泛用于 lambda 表达式。以下是 java.util.Function 包中定义的函数接口列表。

先生。 接口及说明
1

BiConsumer<T,U>

表示接受两个输入参数且不返回结果的操作。

2

双函数<T,U,R>

表示接受两个参数并产生结果的函数。

3

二元运算符<T>

表示对两个相同类型的操作数进行运算,产生与操作数相同类型的结果。

4

双谓词<T,U>

表示两个参数的谓词(布尔值函数)。

5

布尔供应商

代表布尔值结果的提供者。

6

消费者<T>

表示接受单个输入参数且不返回结果的操作。

7

双二元运算符

表示对两个双值操作数进行运算并生成双值结果。

8

双重消费者

表示接受单个双值参数且不返回结果的操作。

9

双功能<R>

表示接受双值参数并生成结果的函数。

10

双谓词

表示一个双值参数的谓词(布尔值函数)。

11

双供应商

代表双值结果的提供者。

12

DoubleToInt 函数

表示接受双值参数并生成 int 值结果的函数。

13

DoubleToLong 函数

表示接受双值参数并生成长值结果的函数。

14

双一元运算符

表示对单个双值操作数产生双值结果的运算。

15

函数<T,R>

表示一个函数,它接受一个参数并产生一个结果。

16

整数二元运算符

表示对两个 int 值操作数的运算并产生 int 值结果。

17 号

国际消费者

表示接受单个 int 值参数且不返回结果的操作。

18

整数函数<R>

表示接受 int 值参数并生成结果的函数。

19

内部谓词

表示一个 int 值参数的谓词(布尔值函数)。

20

国际供应商

代表 int 值结果的提供者。

21

整数转双精度函数

表示接受 int 值参数并生成双值结果的函数。

22

IntToLong函数

表示接受 int 值参数并生成 long 值结果的函数。

23

整型一元运算符

表示对单个 int 值操作数进行的操作,该操作会生成 int 值结果。

24

长二元运算符

表示对两个长值操作数的运算并产生长值结果。

25

长消费者

表示接受单个长值参数且不返回结果的操作。

26

长函数<R>

表示接受长值参数并生成结果的函数。

27

长谓词

表示一个长值参数的谓词(布尔值函数)。

28

长供应商

代表长期有价值的结果的提供者。

29

长到双功能

表示接受长值参数并生成双值结果的函数。

30

LongToInt函数

表示接受长值参数并生成 int 值结果的函数。

31

长一元运算符

表示对单个长值操作数进行的操作,该操作会生成长值结果。

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

ToLongBi函数<T,U>

表示接受两个参数并生成长值结果的函数。

42

ToLong函数<T>

表示产生长值结果的函数。

43

一元运算符<T>

表示对单个操作数的操作,产生与其操作数相同类型的结果。

函数式接口示例

Predicate <T> 接口是一个函数式接口,其方法 test(Object) 返回布尔值。这个接口表示一个对象被测试为真或假。

使用您选择的任何编辑器(例如 C:\> JAVA)创建以下 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