java相邻相加_java List 相邻两个数据累加,可以用stream的collectors.reducing实现么

博客探讨了如何使用Java Stream API处理List数据,特别是相邻元素的累加问题。文章指出collectors.reducing更适合聚合操作,而根据需求,这里实际上是需要修正操作,即每个元素需要加上前一个元素的值。解决方案是使用forEach配合自定义Consumer,通过闭包保存上一个月的数据,并进行累加。文中还提供了简化版本的处理方式,如使用reduce方法或自定义辅助方法完成累加,并讨论了如何根据类的特定属性进行去重。
摘要由CSDN通过智能技术生成

答案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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值