collect: 收集器
Collector作为collect方法的参数
Collector是一个接口
是一个可变的汇聚操作,作用是将输入参数给累计到一个可变的结果容器中,它会在所有元素都处理完毕后,将累计后的结果转换为一个最终的表示(这是一个可选操作);
支持串行与并行两种方式执行。
比如说:将元素累积到Collection集合中,使用StringBuilder字符串进行拼接,计算sum、min、max或average等汇总信息,计算透视表 例如得到分组后每个“卖家的最大值交易”
Collectors本身提供了关于Collector的常见汇聚实现,Collectors本身实际上是一个工厂。
一个Collectors由四个函数来指定的,将条目累积到可变结果容器中,并可选择执行结果的最终转换
1.创建新的结果容器supplier()
Supplier<A> supplier();
2.将新数据元素合并到结果容器accumulator() 将一个值折叠到可变的结果容器中
BiConsumer<A, T> accumulator();
3.将两个结果容器合并为一个combiner()
BinaryOperator<A> combiner();
4.在容器上执行可选的最终转换finisher()
Function<A, R> finisher();
为了确保串行与并行操作结果的等价性,Collector函数需要满足两个条件:identity(同一性)
associativity(结合性)