函数式接口
函数式接口指的是:有且仅有一个抽象方法,但是可以有多个非抽象方法的接口(接口默认方法)。
1 @FunctionalInterface注解
该注解标记一个接口为函数式接口。
对于标注了这个注解的接口,编译器会强制检查该接口是否有且仅有一个抽象方法。否则会报错。
即使不使用该注解,只要满足函数式接口的定义,就是一个函数式接口
2 与Lambda表达式结合
函数式接口可以被隐式转换为Lambda表达式。
如果有一个方法使用函数式接口作为参数,那么就可以使用Lambda进行传参。
比如线程中的Runable接口:
//匿名内部类写法
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("内部类写法");
}
}).start();
//lambda 写法
new Thread(() -> System.out.println("lambda写法")).start();
3 常用的函数式接口
JDK 1.8 之前已有的函数式接口
java.lang.Runnable
java.util.concurrent.Callable
java.util.Comparator
JDK 1.8 新增加的函数接口
//java.util.function包下
Consumer<T>
//消费者,使用已经准备数据
Function<T,R>
//输入一个或者两个不同或者相同的值转为另一个值
Predicate<T>
//输入一个或者两个不同或者相同的值总是输出boolean
Supplier<T>
//供应者,生产数据
//。。。