我是靠谱客的博主 平淡小鸭子,最近开发中收集的这篇文章主要介绍streamset 数据合并_java List 相邻两个数据累加,可以用stream的collectors.reducing实现么...,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

a0= a0,

a1= a0 + a1,

a2= a1 + a2…

有位兄台提醒我了, 我把业务说一下.

场景是我需要给echart的折线图赋数据.

LineDto是一个有两个字段的Dto.

Date(月份),

Count(值).

每月(Date)显示的是当月的数值(Count).

现在是需求变了, 每月显示的是累加的数值, 就是当月之前的数值也累加到当前Count上.

所以我想到的是先查询出来后,

1月, a0 = 1月的Count,

2月, a1 = a0 + 2月的Count,

3月, a2 = a1 + a2,

….

我是用for循环实现的, 但是我强迫症总想用stream的相关api来实现, 所以问问各位兄台有没有例子我学习一下.

if(CollectionUtils.isNotEmpty(result)){

LineDto dto = new LineDto();

dto.setGemBoardCount(0);

for (LineDto i : result) {

i.setGemBoardCount(i.getGemBoardCount() + dto.getGemBoardCount());

dto = i;

}

}

我想问下, 可以用stream的collectors.reducing实现么, 谢谢

回答

y1s1哈,题主你这个稍微归纳总结一下嘛。。。不然非得让我们回答的人来理解你什么XXXCount的业务字段啊。。。万一看错了,导致最终提供的方法也就错了哦~

不过我自己理解下来,觉得你就是希望把一个List合并成一个LineDto,合并的要求是,某些数字字段(就是你那些XXXCount)分别相加合并

因为是某些字段,题主是XXXCount,那我就简化为num1,num2这样好看点的字段,如果明白我的思路,到时候题主自行转换一下就行了

那我把LineDto定义为:

@Data

@AllArgsConstructor

@NoArgsConstructor

public class LineDto {

private int num1;

private int num2;

}

那提供一个List,我们进行合并操作,这里也不一定非要用collectors.reducing吧。。。咋的,是瞧不起咱们stream自带的reduce方法么?哈哈哈哈,开玩笑,自带明显比collectors.reducing少写几个字母嘛,程序员捡懒,我就按照stream.reduce来举例了哈

List result = new ArrayList<>();

result.add(new LineDto(1, 20));

result.add(new LineDto(2, 30));

LineDto lineDto = result.stream().reduce(new LineDto(), LineDto::merge);

不过真非要用collectors.reducing也行,不过他们效果一样

LineDto reduce = result.stream().collect(Collectors.reducing(new LineDto(), LineDto::merge));

这里reduce操作中第二个参数我用了LineDto::merge,这是一个额外方法,其实就是把LineDto合并操作抽取出来,我是写在了LineDto中,当然你也可以写在其他地方

@Data

@AllArgsConstructor

@NoArgsConstructor

public class LineDto {

private int num1;

private int num2;

public LineDto merge(LineDto newLineDto) {

this.num1 = this.num1 + newLineDto.getNum1();

this.num2 = this.num2 + newLineDto.getNum2();

return this;

}

}

其实merge方法也没有多复杂,就是按照业务需求,把相应的字段进行合并即可

当然如果你为了LineDto的纯净简单性,不需要有这类业务代码耦合,那你可以写在其他地方,比如

public class LineDtoHelper {

public static LineDto merge(LineDto dto1, LineDto dto2) {

dto1.setNum1(dto1.getNum1() + dto2.getNum1());

dto1.setNum2(dto1.getNum2() + dto2.getNum2());

return dto1;

}

}

那调用的时候就需要改为:

LineDto lineDto = result.stream().reduce(new LineDto(), LineDtoHelper::merge);

其实也很简单吧,题主可以去玩玩试试~拜了个拜~(๑•̀ㅂ•́)و✧

最后

以上就是平淡小鸭子为你收集整理的streamset 数据合并_java List 相邻两个数据累加,可以用stream的collectors.reducing实现么...的全部内容,希望文章能够帮你解决streamset 数据合并_java List 相邻两个数据累加,可以用stream的collectors.reducing实现么...所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部