Java8 - 功能接口

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

序号 接口 & 描述
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

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

13

DoubleToLongFunction

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

14

DoubleUnaryOperator

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

15

Function<T,R>

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

16

IntBinaryOperator

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

17

IntConsumer

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

18

IntFunction<R>

表示一个接受 int 值参数并产生结果的函数。

19

IntPredicate

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

20

IntSupplier

代表整数值结果的提供者。

21

IntToDoubleFunction

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

22

IntToLongFunction

表示一个函数,该函数接受 int 值参数并产生 long 值结果。

23

IntUnaryOperator

表示对产生整数值结果的单个整数值操作数的操作。

24

LongBinaryOperator

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

25

LongConsumer

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

26

LongFunction<R>

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

27

LongPredicate

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

28

LongSupplier

代表长期价值结果的供应商。

29

LongToDoubleFunction

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

30

LongToIntFunction

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

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) 来返回一个布尔值。 此接口表示一个对象被测试为真或假。

使用您选择的任何编辑器(例如 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 作为参数传递给 Predicate 接口的测试方法
      // 无论 n 的值是多少,测试方法总是返回 true。
		
      System.out.println("Print all numbers:");
		
      //pass n as parameter
      eval(list, n->true);
		
      // Predicate<Integer> predicate1 = n -> n%2 == 0
      // n 作为参数传递给 Predicate 接口的测试方法
      // 如果 n%2 变为零,测试方法将返回 true
		
      System.out.println("Print even numbers:");
      eval(list, n-> n%2 == 0 );
		
      // Predicate<Integer> predicate2 = n -> n > 3
      // n 作为参数传递给 Predicate 接口的测试方法
      // 如果 n 大于 3,测试方法将返回 true。
		
      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