Java8InAction学习笔记(三) - 18965050/Java8InAction GitHub Wiki
Collector(收集器)用于Stream的collect()方法,java8中提供了Collector的工厂类Collectors,用于不同的操作.比如
- reduce方式的操作
- join
- minBy/maxBy
- counting
- ......
- group方式的操作
- groupingBy: groupBy方法通过outerGroup,innerGroup可实现递归分组
- partition方式的操作: partition是group的一种特例, 以Predicate作为参数,表示结果map中的key只能以boolean的true或false作为key
- partitionBy

接口定义如下:
public interface Collector<T, A, R> {
//返回一个用于accumulator操作的对象
Supplier<A> supplier();
//执行reduction操作
BiConsumer<A, T> accumulator();
//accumulator处理完后做的事
Function<A, R> finisher();
//用于两个集合的操作
BinaryOperator<A> combiner();
/**用于定义reduct行为阶段.包括:
* UNORDERED: 当进行accumulate的时候, 元素顺序不会变
* CONCURRENT: 是否能进行并发调用
* IDENTITY_FINISH: accumulate是否为最终的结果
**/
Set<Characteristics> characteristics();
}
其中:
- T: stream.collect()调用中元素的类型
- A: accumulator的类型
- R: stream.collect()调用返回对象类型