函数式接口:
有且仅有一个抽象方法的接口
适用于函数式编程的接口 (适用于Lambda表达式的接口)
@FunctionalInterface //检测接口是否是一个函数式接口
函数式接口的使用:一般可以作为方法的参数和返回值类型
Lambda表达式不生成.class (提高加载效率)
Lambda表达式作参数:延迟加载 (节省性能)
常用函数式接口:
Supplier Consumer
Predicate Function
Supplier接口
java.util.function.Supplier<T>
无参方法:T get()
用来获取一个泛型参数指定类型的对象数据
Supplier<T>接口被称为生产型接口:
指定接口的泛型是什么,get方法就产生什么类型的对象数据
Consumer接口
java.util.function.Consumer<T>接口
抽象方法:void accept(T t)
意为消费一个指定泛型的对象数据
Supplier<T>接口被称为消费型接口:
泛型是什么类型,accept方法就消费什么类型的对象数据
至于怎么消费(使用),需要自定义(输出,计算...)
默认方法:andThen()
作用:需要两个Consumer接口,可以把两个Consumer接口组合到一起,再对数据进行消费
例:
Consumer<String> con1
Consumer<String> con2
String s="hello";
con1.accept(s);
con2.accept(s);
<==> 连接两个Consumer接口再消费
con1.andThen(con2).accept(s); //谁写前面谁先消费
Predicate接口
java.util.function.Predicate<T>接口
作用:对某种数据类型的数据进行判断,结果返回一个boolean值
抽象方法:boolean test(T t)
对指定数据类型进行判断,符合条件返回true,否则返回false
默认方法:and()
表示并且关系 &&
例:
pre1.test(s)&&pre2.test(s);
<==>
pre1.and(pre2).test(s);
默认方法:or()
表示或者关系 ||
默认方法:negate()
表示取反/非 !
Function接口
java.util.function.Function<T t>接口
抽象方法:R apply(T t)
根据类型T的参数获取类型R的结果
Function<T t>接口被称为转换类型接口
默认方法:andThen()
用来进行组合操作
int in = fun1.apply(s);
String str = fun2.apply(in);
<==>
String str = fun1.andThen(fun2).apply(s);