首页 > 编程语言 >java stream分组之后求和

java stream分组之后求和

时间:2023-08-17 18:00:16浏览次数:60  
标签:java Collectors stream sum ElementComponentDto collect 分组 getName

java stream分组之后求和

癞蛤蟆吃了小天鹅

于 2022-08-26 09:37:42 发布

6023
收藏 4
文章标签: java
版权
注:elementComponentDtos.stream().mapToDouble(ElementComponentDto::getAmount).sum();为求和可以根据返回类型的不同去改变相对应的求和函数(mapToDouble)
注 BigDecimal为了保留double类型两位小数(方法二和三没做处理)
注:collect1为原数据 collect为返回结果集
方法一:
Map<String, List<ElementComponentDto>> collect2 = collect1.stream().collect(Collectors.groupingBy(o -> o.getName()));
for (Map.Entry entry2 : collect2.entrySet()) {
List<ElementComponentDto> elementComponentDtos = collect2.get(entry2.getKey());
double sum = elementComponentDtos.stream().mapToDouble(ElementComponentDto::getAmount).sum();
BigDecimal bigDecimal = new BigDecimal(sum).setScale(2, RoundingMode.HALF_UP);
double newDouble = bigDecimal.doubleValue();
List<ElementComponentDto> collect3 = elementComponentDtos.stream().filter(Predicate).
map(e -> new ElementComponentDto(null, null, null, e.getName(), e.getCompany(), newDouble)).collect(Collectors.toList());
collect3.forEach(e -> {
collect.add(e);
});
}
方法二:

注:collect4 (ElementComponentDto)即为返回数据已经包装好的数据,你只用把ElementComponentDto放入你想要的具体返回结果集里就好。Map<String, ElementComponentDto>String 即为想要按照那个字段分组的字段。ElementComponentDto.builder()为你要返回类型去创建对象

Map<String, ElementComponentDto> collect4 = collect1.stream().collect(Collectors.groupingBy(ElementComponentDto::getName)).entrySet()
.stream().collect(Collectors.toMap(o->o.getKey(), o -> {
List<ElementComponentDto> l = o.getValue();
double sum = l.stream().mapToDouble(ElementComponentDto::getAmount).sum();
return ElementComponentDto.builder().company(l.get(0).getCompany()).amount(sum).name(l.get(0).getName()).build();
}));
方法三: 同方法二

HashMap<String, ElementComponentDto> collect3 = collect1.stream().collect(Collectors.groupingBy(o -> o.getName(),
HashMap::new, Collectors.collectingAndThen(Collectors.toList(), l -> {
double sum = l.stream().mapToDouble(ElementComponentDto::getAmount).sum();
return ElementComponentDto.builder().company(l.get(0).getCompany()).amount(sum).name(l.get(0).getName())
.build();
})));
————————————————

标签:java,Collectors,stream,sum,ElementComponentDto,collect,分组,getName
From: https://www.cnblogs.com/lyf906522290/p/17638381.html

相关文章

  • 【狂神说Java】Java零基础学习笔记-JavaSE总结
    【狂神说Java】Java零基础学习笔记-JavaSE总结JavaSE总结:......
  • java:使用flexmark-java 实现 CommonMark(规范 0.28)解析
    文档https://github.com/vsch/flexmark-java依赖Java8<dependency><groupId>com.vladsch.flexmark</groupId><artifactId>flexmark-all</artifactId><version>0.62.2</version></dependency>Java9+&l......
  • Java踩坑1.Plugin org.apache.maven.plugins:maven-install-plugin:2.5 could not
    首次运行maveninstall或任何一个插件时,报错:Downloadingfromhuaweicloud:https://repo.huaweicloud.com/repository/maven/org/apache/maven/plugins/maven-install-plugin/2.5/maven-clean-plugin-2.5.pom[INFO]---------------------------------------------------------......
  • 【狂神说Java】Java零基础学习笔记-异常
    【狂神说Java】Java零基础学习笔记-异常异常01:Error和Exception什么是异常实际工作中,遇到的情况不可能是非常完美的。比如:你写的某个模块,用户输入不一定符合你的要求、你的程序要打开某个文件,这个文件可能不存在或者文件格式不对,你要读取数据库的数据,数据可能是空的等。我们......
  • javascript学习笔记day3
    今天没做啥笔记都是些学了的基础知识,学的都是像while,switch这些基础的语法,下面带是笔记++i前置运算和i++后置运算的区别:前置运行先相加再计算,后端运算先计算完再++。比较符也有隐式转换brank退出循环continue退出本次循环继续下次循环 顺便把while的循环作业一起放上来了,这个......
  • JAVA权限管理 助力企业精细化运营
    在企业的日常经营中,企业人数达到一定数量之后,就需要对企业的层级和部门进行细分,建立企业的树形组织架构。围绕着树形组织架构,企业能够将权限落实到个人,避免企业内部出现管理混乱等情况。权限管理是每个企业管理中的重要内容,但在实操中,权限管理面临着诸多考验。因为,权限管理本身不......
  • (随笔)java的几种不同类的介绍和说明
    在Java中,有几种不同类型的类可以用于实现类的嵌套和封装。下面是四种常见的类类型:外部类(OuterClass):外部类是最基本的类类型,它独立存在并且不依赖于其他类。外部类可以包含成员变量、方法和其他内部类。外部类不能直接访问内部类的成员,但可以通过创建内部类对象来访问。静态......
  • JAVA权限管理 助力企业精细化运营
    在企业的日常经营中,企业人数达到一定数量之后,就需要对企业的层级和部门进行细分,建立企业的树形组织架构。围绕着树形组织架构,企业能够将权限落实到个人,避免企业内部出现管理混乱等情况。权限管理是每个企业管理中的重要内容,但在实操中,权限管理面临着诸多考验。因为,权限管理本身不是......
  • Windows系统下将java程序开机自启
    1.下载使用winsw将可执行程序注册为windows的系统服务。点击右侧release下载对应版本。https://github.com/kohsuke/winsw需要下载对应的exe可执行文件和xml模板2.编写配置文件将下载的exe更名为你的服务名,如:MyAPP.exe。打开sample-minimal.xml<service><id>MyApp......
  • 【Idea】新建时没有Java Class选项
    问题:java文件新建没有java文件  解决方法:文件-项目结构-模块-选择项目,将文件标记为相应的源或资源等 应用-确定后,java文件夹右键新建  ......