Collectors.collectingAndThen()
作者:互联网
Collectors.collectingAndThen()
Java 8
流的新类java.util.stream.Collectors
实现了java.util.stream.Collector
接口,同时又提供了大量的方法对流 (stream
) 的元素执行map
and
reduce
操作,或者统计操作。
Collectors.collectingAndThen()
函数应该最像 map and reduce
了,它可接受两个参数,第一个参数用于 reduce
操作,而第二参数用于 map
操作。
也就是,先把流中的所有元素传递给第二个参数,然后把生成的集合传递给第一个参数来处理。
例如下面的代码
- 把
[1,2,3,4]
这个集合传递给v -> v * 2
lambda表达式,计算得出结果为[2,4,6,8]
- 然后再把
[2,4,6,8]
传递给Collectors.averagingLong
表达式,计算得出5.0
- 然后传递给
s -> s * s
lambda表达式,计算得到结果为25.0
collectingAndThenExample测试
@Test
public void collectingAndThenExample() {
List<Integer> list = Arrays.asList(1, 2, 3, 4);
Double result = list.stream().collect(Collectors.collectingAndThen(Collectors.averagingLong(v -> {
System.out.println("v--" + v + "--> " + v * 2);
return v * 2;
}),
s -> {
System.out.println("s--" + s + "--> " + s * s);
return s * s;
}));
System.out.println(result);
}
collectingAndThenExample结果
v--1--> 2
v--2--> 4
v--3--> 6
v--4--> 8
s--5.0--> 25.0
25.0
一点唠叨:
- 相对于
Collectors.averagingDouble()
来说,方法体只执行一次。 - 相对于
Collectors.averagingDouble()
来说,方法体做出了优化 - 相对于
Collectors.averagingDouble()
来说,这个没有坑 - ……
- 为什么这么提
Collectors.averagingDouble()
,最好看一下—> averagingDouble - 因为
Collectors.averagingDouble()
有坑,有坑,有坑
标签:averagingDouble,Collectors,stream,--,collectingAndThen,out 来源: https://blog.csdn.net/L_fly_J/article/details/120088269