1 collectorImpl
Collectors
中的 的基础collectorImpl
两个构造方法一个有finisher()
, 一个没有。这个很容易理解,一个需要转换中间结果,一个中间结果和最终结果一致,所以不需要使用finisher()
方法
2 两种实现方式
对于工厂类 两种实现方式
CollectorImpl
来实现。reduceing
来实现, 而reducing
方法归根还是用的是CollectorImpl
方法来实现
3 常见函数
1) toList()
& toCollection
两个最常用的方法
toList()
&toCollection
toSet()
方法是也是toCollection
的特化。
2) joining()
joining
三种重载方法
3) mapping()
mapping()
将输入元素转换成输出元素
|
|
4) collectingAndThen()
collectingAndThen(Collector<T,A,R> downstream, Function<R,RR> finisher)
先过完上层收集器downstream
,在进行一次finisher()
转换结果比如说,你在
toList()
之后,想将它转换成一个immutableList()
就可以如下使用
List<String> people = people.stream().collect(collectingAndThen(toList(), Collections::unmodifiableList));
实现其实很有意思
5) counting()
, minBy()
, maxBy()
counting()
,minBy()
,maxBy()
用reducing()
实现,reducing()
又是基于CollectorImpl
实现
6) summingInt()
, averagingInt()
, averagingDouble()
summingInt()
对每一个元素使用toIntFunction
在累加,实现很有意思
Supplier()
采用生成了一个 长度为1 的 int
数组,而不是直接使用的整形数字?
因为数字是一个 值
, 值是无法传递的,而数组是一个 引用
, 引用是可以传递的。
averagingInt()
求平均值
- 对于
averagingDouble()
的实现可以再去看一下,他的初始数组长度为4,他们视为浮点数计算的补偿产生的。