java8的新特性之一就是lambada表达式。在了解基本lambada语法基础上,我为大家分享一下jdk自带的函数式接口。
1.什么样的接口叫做函数式接口? 答:该接口只有一个要实现的方法。 注意措辞,要实现的方法,java8在接口的方法里面添加了一个default方法,default方法就只默认实现的方法,这种默认方法给java8带来了很多方便,比如在以前的接口加方法不 用重新实现等。 2.上图
接口参数返回类型说明PredicateTboolean断言:接受一个参数返回boolean类型ConsumerTvoid消费一个数据:比如打印一个数据Function<T, R>TR输入一个T类型返回R类型的函数UnaryOperatorTT输入和输出都是T类型,继承FunctionBiFunction<T, U, R>T,UR两个输入一个输出BinaryOperatorT,TT输入输出相同类型的二元函数3.demo 1.断言函数
Predicate<Integer> predicate = o->o>8; System.out.println(predicate.test(9));` //返回为真 //改进为方法引用, public class Test2 { public static void main(String[] args) { Predicate<Integer> predicate = Test1::comparaInteger; System.out.println(predicate.test(9)); } } class Test1{ private String name; private Integer zzz; public Test1(String name) { this.name = name; } public Test1(String name, Integer zzz) { this.name = name; this.zzz = zzz; } public Test1() { } public static boolean comparaInteger(Integer integer){ return integer>8; } Integer getZzz(Integer i,Integer j){ return Math.max(Math.max(i,j),zzz); } }2.消费函数
public static void main(String[] args) { Consumer<String> consumer = System.out::println; consumer.accept("我系渣渣辉"); //结果是打印,我系渣渣辉这句话 }3.提供者
Supplier<Test1> supplier = Test1::new; System.out.println(supplier); //调用无参构造返回一个对象,4.Function
Function<String,Test1> function = Test1::new; function.apply("渣渣辉"); //还是返回一个Test1,这里调用了一个有参构造5.BiFunction
BiFunction<Integer,Integer,Integer> function = new Test1("渣渣辉",99)::getZzz; System.out.println(function.apply(56,159));方法都差不多,多用几次就熟练了。