stream reduce 执行源码简易分析

stream reduce 执行源码简易分析

stream 分为中间操作和最终操作两种,而最终操作只会执行一次,且中间操作执行延迟到最终操作执行时。

stream reduce为规约操作API:

 

 

 

由参数BinaryOperator类泛型特性:1和2reduce规约针对的是一种类型的规约,初始值,集合,规约后的值参数必须一致:

 

 

 

3接口:初始值U的类型与集合元素类型可以不一致,combiner 参数在并行(parallel)操作中组合accumulator计算结果,且combiner需要兼容accumulator,不然并行计算结果有误。

 

 

 

 从源码上看,自定义的部分在下图方法中定义:

 

 

 1为初始值赋值,2为accumulator计算,3为combiner计算,从代码中可以看到1,2,3规约到state变量中。计算逻辑和初始数据封装在ReducingSink对象中:

 

 

 

 

 回到:

 

 evaluate方法根据串并行分别执行各自的逻辑:

 

 在串行逻辑中分别执行了state初始化赋值和accumulator计算,但是没有执行combiner操作,所以combiner对串行操作无效。

 

 并行操作有代理方式执行:底层为forkjoin处理并行的计算:

 

 

 

posted @ 2021-06-17 17:32  芬尼拔  阅读(93)  评论(0编辑  收藏  举报