JDK1.8新特性 Collector

Collector就是收集器的意思。

Collector内部实现的方法有4个分别是:

1.supplier 该方法相当于结果容器 作用是创建并返回一个可变的结果容器

2.accumulator 该方法相当于累加器 把流中的元素累加到结果容器中

3.combiner 该方法相当于组合器  并行流下,把多个并行得到的部分结果组合成一个最终结果

4.finish  该方法相当于最终结果容器  (可选择的)把最终结果转换成另一种类型的结果

characteristics方法,标识该收集器的特征

1.CONCURRENT characteristics中存在枚举IDENTITY_FINISH,则中间结果容器只会存在一个,不管是否是并行流。注意使用 parallelStream并行流。accumulator 执行时,多个线程同时操作一个结果容器(多线程情况下),进行边查询边修改,会抛出ConcurrentModificationException (并行时操作异常)。不加CONCURRENT ,多个线程会产生多个结果容器,例如下面有多个set,则不会抛出异常,然后执行combiner和并结果。

总结:并行环境下,并且不加CONCURRENT枚举,combiner方法才会被执行,多个线程产生多个结果并进行合并。加上CONCURRENT枚举,combiner方法不会被执行,一个结果不需要合并。

2.IDENTITY_FINISH  characteristics中存在枚举IDENTITY_FINISH ,会强制转换成结果类型,不会调用finish方法  否则会调用finish方法

3.UNORDERED  characteristics中存在枚举UNORDERED  结果容器时无序的

猜你喜欢

转载自blog.csdn.net/qq_39918471/article/details/106793037