jdk1.8 中的java.util.function类提供了大量的函数式接口,以供方便的使用lambda表达式。
本文对主要的函数式接口做一些简单的介绍。
一.Predicate
Predicat 接收参数T对象,返回一个Boolean类型的对象。
根据源码,我们需要实现test方法,返回类型为Boolean类型。
举例:
Predicate pr = (String name) -> "true".equals(name);
System.out.println(pr.test("true"));
运行结果:
true
二.Consumer
Consumer 接收参数T对象,不返回任何对象。
根据源码,我们需要实现无返回值的accept方法。
举例:
Consumer cu =(String test) -> System.out.println("this is Consumer demo:"+test);
cu.accept("hello consumer");
运行结果:
this is Consumer demo:hello consumer
三.Function
Function 接收参数T对象,返回R对象。
根据源码,我们需要实现apply方法,传参为T对象,返回值为R对象。
举例:
Function fc = (Integer num) -> "test return:"+num;
System.out.println(fc.apply(22));
运行结果:
test return:22
四.Supplier
Supplier 不接受任何参数,直接获取指定T类型返回值。
根据源码,需要实现get方法。
举例:
Supplier sp =()->"test Supplier";
System.out.println(sp.get());
运行结果:
test Supplier
五.UnaryOperator
unaryOperator 接收参数T,通过业务逻辑处理后返回更新后的T类型参数
根据源码,UnaryOperator继承了Function类,根据前文描述,我们要实现Function类的apply方法。
举例:
UnaryOperator uo =(String test) -> "unaryOperator update string:"+test;
System.out.println(uo.apply("test"));
运行结果:
unaryOperator update string:test
六.BiFunction
Bifunction 接收第一个参数T,第二个参数U,返回R类型参数。
根据源码需要实现apply方法。
举例:
BiFunction bf =(String name,Integer age) -> "test BiFunction, my name is "+name+",my year's old is "+age;
System.out.println(bf.apply("Tom", 18));
运行结果:
test BiFunction, my name is Tom,my year's old is 18
七.BinaryOperator
BinaryOperator 接收两个参数T,返回更新后的T类型参数。
根据源码,BinaryOperator继承了Bifunction,所以我们同样实现apply方法即可。
举例:
BinaryOperator bo = (String name,String sport)->"test BinaryOperator,my name is "+name+",my favourite sport is "+sport;
System.out.println(bo.apply("Tom", "basketball"));
运行结果:
test BinaryOperator,my name is Tom,my favourite sport is basketball