概念:有且仅有一个抽象方法的接口。适用于函数式编程场景的接口。
二、常用函数式接口@FunctionalInterface 注解
编译器将会强制检查该接口是否确实有且仅有一个抽象方法,否则会报错。
JDK提供了大量常用的函数式接口以丰富Lambda的典型使用场景,主要在 java.util.function 包中提供。
Supplier 接口
java.util.function.Supplier
接口仅包含一个无参的方法:T get()。用来获取一个泛型参数指定类型的对象数据。 Supplier
接口被称之为生产型接口,指定接口的泛型是什么类型,那么接口中的get方法就会生产什么类型的数据。
Consumer 接口
java.util.function.Consumer
接口则正好与Supplier 接口相反,它不是生产一个数据,而是消费一个数据,其数据类型由泛型决定。 1. 抽象方法:accept
Consumer接口中包含抽象方法 void accept(T t),意为消费一个指定泛型的数据。
Consumer 接口是一个消费型接口,泛型执行什么类型,就可以使用accept 方法消费什么类型的数据。
2. 默认方法:andThen
如果一个方法的参数和返回值全都是Consumer 类型,那么就可以实现效果:消费数据的时候,首先做一个操作,然后再做一个操作,实现组合。而这个方法就是Consumer 接口中的default方法 andThen。
作用:需要两个Consumer接口,可以把两个Consumer接口组合到一起,再对数据进行消费。
Predicate 接口
java.util.function.Predicate
接口,对某种数据类型的数据进行判断,结果返回一个boolean值。 1. 抽象方法:test
Predicate 接口中包含一个抽象方法:boolean test(T t)。用于条件判断。
2. 默认方法:and(与)、or(或)、negate(非)
Function 接口
java.util.function.Function
接口用来根据一个类型的数据得到另一个类型的数据,前者(T)称为前置条件,后者(R)称为后置条件。 1. 抽象方法:apply
Function 接口中最主要的抽象方法为:R apply(T t),根据类型T的参数获取类型R的结果。
2. 默认方法:andThen
Function 接口中有一个默认的 andThen方法,用来进行组合操作。



