这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战。
四位大哥都隶属于java.util.function包下,Consumer(消费型),Supplier(供给型)、Predicate(判断型)与Function<T,R>(转换型),UnaryOperator一元函数,BiFunction<T,U,R>两个输入函数,BinaryOperator二元函数。
具体如下:
函数式接口只有一个方法的接口:
@FunctionalInterface
interface Interface2{
String format(int money);
}
一、 Consumer接口——消费型接口
consumer接口就是一个消费型的接口,通过传入参数,然后操作处理,没有返回。
T:入参类型;没有出参
调用方法:void accept(T t);
常用于打印、发送短信等消费动作
示例:
Consumer<String> consumer= p -> System.***out***.println(p);
Consumer<String> consumer = s-> System.out.println(s);
Consumer<String> consumers = s-> System.out.println(s=s.toUpperCase());
consumer.accept("8999willson.zou");
consumer.andThen(consumers).accept("22228999willson.zou");
调用函数:consumer.accept("xxx");
Consumer总结:
Consumer接口是一个消费型的接口,只要实现它的accept方法,就能作为消费者来输出信息。 lambda、方法引用都可以是一个Consumer类型,因此他们可以作为forEach的参数,用来协助Stream输出信息。 Consumer还有很多变种,例如IntConsumer、DoubleConsumer与LongConsumer等,归根结底,这些变种其实只是指定了Consumer中的泛型而已,方法上并无变化。
二、 Supplier接口——供给型接口
T:出参类型;没有入参
调用方法:T get();
常用于业务“有条件运行”时,符合条件再调用获取结果的应用场景;创建无参构造函数。
示例: Supplier supplier= () -> 100;
//构造函数的方法引用
Supplier<Dog> dogSupplier = Dog::new;
System.out.println(dogSupplier.get());
Supplier总结:
- Supplier是一个供给型的接口,其中的get方法用于返回一个值。
- Supplier也有很多的变种,例如IntSupplier 、DoubleSupplier 、LongSupplier 、BooleanSupplier等
三、Predicate接口——判断型接口
T:入参类型;出参类型是Boolean
调用方法:boolean test(T t);
示例:Predicate predicate = p -> p % 2 == 0; // 判断是否、是不是偶数
predicate.test(100); // 运行结果true
Predicate总结:
- Predicate 是一个谓词型接口,其实只是起到一个判断作用。\
- Predicate 通过实现一个
test方法做判断。
四、 Function接口——功能型接口
Function是一个功能型的接口,用于将一种类型的数据转化为另外一种类型的数据。
T:入参类型,R:出参类型
调用方法:R apply(T t);
示例:Function<Integer, String> func = p -> String.value(p * 10); // 输出入参的10倍
调用函数示例:func.apply(10);
Function总结:
- Function是一个转换型的接口,其中的apply可以将一种类型的数据转化成另外一种类型的数据。
- Function的变种IntFunction 、DoubleFunction 、LongFunction 、ToIntFunction 、ToDoubleFunction 、DoubleToIntFunction 等。