Java 8功能接口


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

____下面给出的是Java8中的接口列表。

序号 接口和说明
1 BiConsumer 表示接受两个输入参数的操作,并且不返回结果。
2 BiFunction 表示接受两个参数并产生结果的函数。
3 BinaryOperator 表示对两个相同类型操作数的操作,生成与操作数相同类型的结果。
4 BiPredicate 表示两个参数的谓词(布尔值函数)。
5 BooleanSupplier 表示布尔值结果的提供者。
6 Consumer 表示接受单个输入参数且不返回结果的操作。
7 DoubleBinaryOperator 表示对两个双值操作数进行操作并生成一个双值结果。
8 DoubleConsumer 表示接受单个双值参数且不返回结果的操作。
9 DoubleFunction 表示接受双值参数并产生结果的函数。
10 DoublePredicate 表示一个双值参数的谓词(布尔值函数)。
11 DoubleSupplier 代表双值结果的供应商。
12 DoubleToIntFunction 表示接受双值参数并生成int值结果的函数。
13 DoubleToLongFunction 表示接受双值参数并生成长值结果的函数。
14 DoubleUnaryOperator 表示对单个双值操作数生成双值结果的操作。
15 Function 表示接受一个参数并产生结果的函数。
16 IntBinaryOperator 表示对两个int值操作数的操作并生成一个int值的结果。
17 IntConsumer 表示接受单个int值参数且不返回结果的操作。
18 IntFunction 表示接受int值参数并产生结果的函数。
19 IntPredicate 表示一个int值参数的谓词(布尔值函数)。
20 IntSupplier 代表一个int值结果的提供者。
21 IntToDoubleFunction 表示接受int值的参数并生成双值结果的函数。
22 IntToLongFunction 表示一个函数,它接受一个int值参数并生成一个长整型结果.
23 IntUnaryOperator 表示对单个int值操作数生成int值结果的操作。
24 LongBinaryOperator 表示对两个长值操作数的操作并生成一个长整型结果。
25 LongConsumer 表示接受单个长值参数且不返回结果的操作。
26 LongFunction 表示接受长值参数并产生结果的函数。
27 LongPredicate 表示一个长值参数的谓词(布尔值函数)。
28 LongSupplier 代表长期结果的供应商。
29 LongToDoubleFunction 表示接受长整型参数并生成双值结果的函数。
30 LongToIntFunction 表示接受长整型参数并生成int值结果的函数。
31 LongUnaryOperator 表示对单个长值操作数生成一个长结果的操作。
32 ObjDoubleConsumer 表示接受对象值和双值参数的操作,并且不返回结果。
33 ObjIntConsumer 表示接受对象值和int值参数的操作,并且不返回结果。
34 ObjLongConsumer 表示接受对象值和长值参数并且不返回结果的操作。
35 Predicate 表示一个参数的谓词(布尔值函数)。
36 Supplier 代表结果供应商。
37 ToDoubleBiFunction 表示一个接受两个参数并产生一个双值结果的函数。
38 ToDoubleFunction 表示产生双值结果的函数。
39 ToIntBiFunction 表示接受两个参数并生成int值结果的函数。
40 ToIntFunction 表示一个产生int值结果的函数。
41 ToLongBiFunction 表示一个接受两个参数并产生一个长整型结果的函数。
42 ToLongFunction 表示一个产生长期结果的函数。
43 UnaryOperator 表示对单个操作数的操作,该操作数生成与其操作数相同类型的结果。

功能接口示例

Predicate 接口是一个具有方法测试(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