JDK 1.8常见的函数式接口
Consumer、Function、Predicate、Supplier 接口分析
1. 这些接口位于:java.util.function 包下
2. 分别是Consumer(消费型)、supplier(供给型)、predicate(谓词型)、function(功能性)
1. Consumer接口
1. Consumer接口就是一个消费型的接口。
2. Consumer接口中,实现accpet方法,该方法有入参,无返回值。
// 生成List列表
public static List<Integer> generator() {
List<Integer> data = Lists.newArrayList(1,3,5,9,11,12);
return data;
}
public static void main(String[] args) {
// Consumer 消费者接口 方式一:
Consumer<Integer> consumer = new Consumer<Integer>() {
@Override
public void accept(Integer operator) {
System.out.println(operator + 2);
}
};
// 使用lambda 方式二:
Consumer<Integer> consumer = operator -> System.out.println(operator + 2);
generator().forEach(consumer);
}
Consumer总结:
① Consumer是一个接口,需实现一个 accept 方法,就可以作为一个“消费者”输出信息。
② 其实,lambda 表达式、方法引用的返回值都是 Consumer 类型,所以,他们能够作为 forEach 方法的参数,并且输出一个值。
2.Supplier 接口
1. Supplier接口就是一个供给型的接口,用来存储数据。
2. Supplier接口中,实现get方法,该方法无入参,有返回值。
public static void main(String[] args) {
Supplier<Integer> supplier1 = new Supplier<Integer>(){
@Override
public Integer get() {
return new Random().nextInt();
}
};
Supplier<Integer> supplier2 = () -> new Random().nextInt();
System.out.println("supplier--->" + supplier2.get());
}
Supplier总结:
① Supplier 接口可以理解为一个容器,用于装数据的。
② Supplier 接口有一个 get 方法,可以返回值。
3.Predicate 接口
1. Predicate接口就是一个预测型的接口,用来进行添加条件判断。
2. Predicate接口中,实现test方法,该方法有入参,有返回值。
public static void main(String[] args) {
// 方式1:
Predicate<Integer> predicate1 = new Predicate<Integer>() {
@Override
public boolean test(Integer operator) {
return operator > 10;
}
};
// 方式2:
Predicate<Integer> predicate2 = operator -> operator > 10;
List<Integer> resp = generator().stream().filter(predicate2).collect(Collectors.toList());
System.out.println("resp---->" + JsonUtils.toJson(resp));
}
Predicate 总结:
① Predicate 是一个预测型接口,其实只是起到一个判断作用。
② Predicate 通过实现一个 test 方法做判断。
4.Function接口
1. Function 接口是一个功能型接口,它的一个作用就是转换作用,将输入数据转换成另一种形式的输出数据。
2. Predicate接口中,实现test方法,该方法有入参,有返回值。
public static void main(String[] args) {
Function<Integer, String> function = new Function<Integer, String>() {
@Override
public String apply(Integer o) {
return "Fun - " + o;
}
@Override
public Function andThen(Function after) {
return Function.super.andThen(after);
}
@Override
public Function compose(Function before) {
return Function.super.compose(before);
}
};
List<String> resp = generator().stream().map(function).collect(Collectors.toList());
}
Function 接口总结
① Function 接口是一个功能型接口,是一个转换数据的作用。
② Function 接口实现 apply 方法来做转换