函数式接口:有且仅有一个抽象方法的接口
适用于函数式编程场景的接口,可以使用与Lambda使用的接口。
格式:
修饰符 interface 接口名称{
public abstract 返回值类型 方法名称(可选参数信息);
}
使用场景:一般作为方法的参数和返回值类型
函数式编程
性能浪费的日志案例
public class Logger {
public static void showLog(int level, String message) {
if (level == 1) {
System.out.println(message);
}
}
public static void main(String[] args) {
String msg1 = "hello";
String msg2 = "world";
String msg3 = "java";
showLog(1, msg1 + msg2 + msg3);
}
}
Consumer接口和Supplier接口相反,不生产数据而是消费一个数据,其数据类型由泛型决定
如果一个方法的参数和返回值全是Consumer类型,那么就可以实现效果:消费数据时,首先做一个操作,然后再做一个操作,实现组合。即Consumer接口中的default方法andThen
源码为:
Predicate接口
需要对某种类型的数据进行判断,从而得到一个boolean值结果,可以使用Predicate接口
Predicate接口中包含一个抽象方法:boolean test(T t)
条件判断会存在与,或,非三种常见的逻辑关系。
其中将两个Predicate条件使用“与”逻辑连接起来实现“并且”的效果时,可以使用default方法and (or,negate与之类似}
Function接口
用来根据一个类型的数据得到另一个类型的数据,前者称为前置条件,后者称为后置条件
抽象方法:apply
R apply(T t)根据类型T的参数获取类型R的结果