函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
函数式接口可以被隐式转换为 lambda 表达式。
Function函数型接口:
可以看出, Function函数型接口特点(也是适用场景):
1. 有输入参数
2. 有返回参数
3. 方法apply()
比如说在Stream流的map方法里面就使用了函数型接口:
Predicate断定型接口:
可以看出, Predicate断定型型接口特点(也是适用场景):
1. 有传入参数
2. 有返回参数,类型为布尔值
3. 方法为test
Stream流中的filter过滤器就用到了断定型接口:
Consumer消费型接口:
顾名思义, Consumer消费型接口特点(也是适用场景):
1. 有传入参数
2. 无返回值
3. 方法accept()
Stream流的forEach里用到了消费型接口:
Supplier供给型接口:
1. 无传入参数
2. 有返回值
3. 方法为get()
每个函数式接口都有对应其功能的使用场景,根据需求去使用。
Java源码中使用了大量的函数式接口作为参数。