无涯教程-Java8 - 函数式接口

93 阅读5分钟

函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。Java8定义了大量在lambda表达式中广泛使用的函数接口。下面是java.util.Function包中定义的函数接口的列表。

以下是Java8中的接口列表。
Sr.No. Interface & Remark
1

BiConsumer<T,U>,u>

代表了一个接受两个输入参数的操作,并且不返回任何结果

2

BiFunction<T,U,R>,u,r>

代表了一个接受两个输入参数的方法,并且返回一个结果

3

BinaryOperator<T>

代表了一个作用于于两个同类型操作符的操作,并且返回了操作符同类型的结果

4

BiPredicate<T,U>,u>

代表了一个两个参数的boolean值方法

5

BooleanSupplier

用于接收lambda表达式所返回的boolean值结果

6

Consumer<T>

代表了接受一个输入参数并且无返回的操作

7

DoubleBinaryOperator

代表了作用于两个double值操作符的操作,并且返回了一个double值的结果。

8

DoubleConsumer

代表一个接受double值参数的操作,并且不返回结果。

9

DoubleFunction<R>

代表接受一个double值参数的方法,并且返回结果

10

DoublePredicate

代表一个拥有double值参数的boolean值方法

11

DoubleSupplier

代表一个double值结构的提供方

12

DoubleToIntFunction

接受一个double类型输入,返回一个int类型结果。

13

DoubleToLongFunction

接受一个double类型输入,返回一个long类型结果

14

DoubleUnaryOperator

接受一个参数同为类型double,返回值类型也为double 。

15 Function<T,R>

接受一个输入参数,返回一个结果。

16

IntBinaryOperator

接受两个参数同为类型int,返回值类型也为int 。

17

IntConsumer

接受一个int类型的输入参数,无返回值 。

18

IntFunction<R>

接受一个int类型输入参数,返回一个结果 。

19

IntPredicate

接受一个int输入参数,返回一个布尔值的结果。

20

IntSupplier

无参数,返回一个int类型结果。

21

IntToDoubleFunction

接受一个int类型输入,返回一个double类型结果 。

22

IntToLongFunction

接受一个int类型输入,返回一个long类型结果。

23

IntUnaryOperator

接受一个参数同为类型int,返回值类型也为int 。

24

LongBinaryOperator

接受两个参数同为类型long,返回值类型也为long。

25

LongConsumer

接受一个long类型的输入参数,无返回值。

26

LongFunction<R>

接受一个long类型输入参数,返回一个结果。

27

LongPredicate

R接受一个long输入参数,返回一个布尔值类型结果。

28

LongSupplier

无参数,返回一个结果long类型的值。

29

LongToDoubleFunction

接受一个long类型输入,返回一个double类型结果。

30

LongToIntFunction

接受一个long类型输入,返回一个int类型结果。

31

LongUnaryOperator

接受一个参数同为类型long,返回值类型也为long。

32

ObjDoubleConsumer<T>

接受一个object类型和一个double类型的输入参数,无返回值。

33

ObjIntConsumer<T>

接受一个object类型和一个int类型的输入参数,无返回值。

34

ObjLongConsumer<T>

接受一个object类型和一个long类型的输入参数,无返回值。

35 Predicate<T>

接受一个输入参数,返回一个布尔值结果。

36 Supplier<T>

无参数,返回一个结果。

37

ToDoubleBiFunction<T,U>,u>

接受两个输入参数,返回一个double类型结果

38

ToDoubleFunction<T>

接受一个输入参数,返回一个double类型结果

39

ToIntBiFunction<T,U>,u>

接受两个输入参数,返回一个int类型结果。

40

ToIntFunction<T>

接受一个输入参数,返回一个int类型结果。

41

ToLongBiFunction<T,U>,u>

接受两个输入参数,返回一个long类型结果。

42

ToLongFunction<T>

接受一个输入参数,返回一个long类型结果。

43

UnaryOperator<T>

接受一个参数为类型T,返回值类型也为T。

Predicate <T> 接口是一个函数式接口,它接受一个输入参数 T,返回一个布尔值结果。该接口包含多种默认方法来将Predicate组合成其他复杂的逻辑(比如:与,或,非)。用于测试对象是 true 或 false。

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);

  </span><span class="com">//Predicate&lt;Integer&gt; predicate=n -&gt; true</span><span class="pln">
  </span><span class="com">//n is passed as parameter to test method of Predicate interface</span><span class="pln">
  </span><span class="com">//test method will always return true no matter what value n has.</span><span class="pln">
	
  </span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Print all numbers:"</span><span class="pun">);</span><span class="pln">
	
  </span><span class="com">//将n作为参数</span><span class="pln">
  </span><span class="kwd">eval</span><span class="pun">(</span><span class="pln">list</span><span class="pun">,</span><span class="pln"> n</span><span class="pun">-&gt;</span><span class="kwd">true</span><span class="pun">);</span><span class="pln">
	
  </span><span class="com">//Predicate&lt;Integer&gt; predicate1=n -&gt; n%2 == 0</span><span class="pln">
  </span><span class="com">//n is passed as parameter to test method of Predicate interface</span><span class="pln">
  </span><span class="com">//test method will return true if n%2 comes to be zero</span><span class="pln">
	
  </span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Print even numbers:"</span><span class="pun">);</span><span class="pln">
  </span><span class="kwd">eval</span><span class="pun">(</span><span class="pln">list</span><span class="pun">,</span><span class="pln"> n</span><span class="pun">-&gt;</span><span class="pln"> n</span><span class="pun">%</span><span class="lit">2</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
	
  </span><span class="com">//Predicate&lt;Integer&gt; predicate2=n -&gt; n &gt; 3</span><span class="pln">
  </span><span class="com">//n is passed as parameter to test method of Predicate interface</span><span class="pln">
  </span><span class="com">//test method will return true if n is greater than 3.</span><span class="pln">
	
  </span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Print numbers greater than 3:"</span><span class="pun">);</span><span class="pln">
  </span><span class="kwd">eval</span><span class="pun">(</span><span class="pln">list</span><span class="pun">,</span><span class="pln"> n</span><span class="pun">-&gt;</span><span class="pln"> n </span><span class="pun">&gt;</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="pun">);</span><span class="pln">

}

public static void eval(List<Integer> list, Predicate<Integer> predicate) {

  </span><span class="kwd">for</span><span class="pun">(</span><span class="typ">Integer</span><span class="pln"> n</span><span class="pun">:</span><span class="pln"> list</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">

     </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">predicate</span><span class="pun">.</span><span class="pln">test</span><span class="pun">(</span><span class="pln">n</span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        </span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="pln">n </span><span class="pun">+</span><span class="pln"> </span><span class="str">" "</span><span class="pun">);</span><span class="pln">
     </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

} }

这里无涯教程传递了断言接口,它接受一个输入并返回Boolean。

使用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

参考链接

www.learnfk.com/java/java8-…