答案2.0
害,之前上一版答案,由于需求没有理解正确,所以惨败,这次再次理清了哈需求,这哪是List合并成一个LineDto
这里不得不说哈题主(甩锅开始),非要说用collectors.reducing,人家reducing是干啥活的,人家是聚合。。。聚合操作一般是指 多 -> 一,所以才有我认为是List合并成一个LineDto(甩锅完毕(ノへ ̄、))
其实呢,这次看需求,其实就是每一个月的count做一个累加,不是最终合并成一个,而是每一个月的count都要做一次修正,因为数据是每个月单月的count数据,所以要修正为累计到该月的count
那既然这是修正操作,按照题主的思路也是正确的,就是要修正的月份count去加上上一个月的修正count即可。也就是这里面其实有一个中间变量LineDto,它总是表示上一个月的LineDto
需求整理清楚,再来看看在Stream的api中用什么合适。倒不是说用collectors.reducing不行,只是语义上不妥,就像Stream的map操作明明是对象转换A -> B
但是有些人就是要使用成consumer的效果A -> A.set();return A;
所以结合需求,这是一个修正操作,是一个类似consumer的做法,结合Stream API,可以确定基本使用peek或者forEach。由于我们没有其他额外操作了,因此选择终结的方法forEach
直接贴出我的最终想法吧(代码里有些注释方便理解)
使用的时候很简单,直接上forEachresult.stream().forEach(cre