java8 collectors_java8的Collectors.reducing()
若v1是null的话,那就说明operationInfos集合里面是有null的,因为是要根据OperationCountVO的cityId进行分组,那OperationCountVO一定不为null,建议前面直接加filter过滤掉
Map collect = operationInfos.stream().filter(Objects::nonNull).collect(Collectors.groupingBy(OperationCountVO::getCityId,
Collectors.reducing(new OperationCountVO(), (OperationCountVO v1, OperationCountVO v2) -> {
v1.setSurgeryCount(v1.getSurgeryCount() + v2.getSurgeryCount());
v1.setCityId(v2.getCityId());
return v1;
})));
刚评论发现...可能报错原因还有可能是,Collectors.reducing中的第一个参数为new OperationCountVO(),若new出来的OperationCountVO对象的surgeryCount为Integer类型,不是基本类型的话,所以没有初始化,surgeryCount就为null,在做v1.getSurgeryCount() + v2.getSurgeryCount()操作的时候就可能报错了呀
(ps:对于reducing中的第二个参数BinaryOperator,最好还是封装到OperationCountVO对象中,看起来代码更声明式一点...这样写代码太丑了...哈哈...或者写出来,写成一个静态final变量更好,到时候可以到处调用嘛)
比如直接在本类上新增一个SurgeryCount属性合并的BinaryOperator,名字就叫surgeryCountMerge
public static final BinaryOperator surgeryCountMerge = (v1, v2) -> {
v1.setSurgeryCount(v1.getSurgeryCount() + v2.getSurgeryCount());
return v1;
}
这样下面代码就可以改成
Map collect = operationInfos.stream()
.filter(Objects::nonNull)
.collect(Collectors.groupingBy(OperationCountVO::getCityId,
Collectors.reducing(new OperationCountVO(), surgeryCountMerge));
这样写了之后,其实发现题主可能做麻烦了点,最后不就是为了返回一个Map嘛,所以建议不使用groupingBy,毕竟分组返回结果是一对多这样的结构,不是一对一的结构,那直接使用toMap嘛,直接点
Map collect = operationInfos.stream()
.filter(Objects::nonNull)
.collect(Collectors.toMap(OperationCountVO::getCityId, Function.identity(), surgeryCountMerge));
这样快多了噻,还不会报错,哈哈
java8 collectors_java8的Collectors.reducing()相关推荐
- java实现两个时间的累加_java List 相邻两个数据累加,可以用stream的collectors.reducing实现么...
答案2.0 害,之前上一版答案,由于需求没有理解正确,所以惨败,这次再次理清了哈需求,这哪是List合并成一个LineDto 这里不得不说哈题主(甩锅开始),非要说用collectors.reduci ...
- java8中的Collectors.groupingBy用法
Collectors.groupingBy根据一个或多个属性对集合中的项目进行分组 数据准备: public Product(Long id, Integer num, BigDecimal pric ...
- Java造两个list_java List 相邻两个数据累加,可以用stream的collectors.reducing实现么
答案2.0 害,之前上一版答案,由于需求没有理解正确,所以惨败,这次再次理清了哈需求,这哪是List合并成一个LineDto 这里不得不说哈题主(甩锅开始),非要说用collectors.reduci ...
- Java8 Stream之Collectors
文章目录 toList.toSet toMap toConcurrentMap toCollection joining collectingAndThen groupingBy groupingBy ...
- Collectors.reducing总结Collectors.mapping+Collectors.reducing+TreeSet等等
Collectors.reducing总结 1. 方法签名 一个参数 public static <T> Collector<T, ?, Optional<T>> ...
- java8 中的 Collectors 全解析
1. 前言 相关的文章中提到了 Collectors .相信很多同学对这个比较感兴趣,那我们今天就来研究一下 Collectors . 2. Collectors 的作用 Collectors 是 J ...
- [Java8新特性]Collectors源码阅读-1 toCollections和joining等
1.Collectors方法实现的种类 Collectors作为一个提供常用collector的静态方法类,里面的有很多公共的静态方法,大多数方法是借助new CollectorImpl来实现的,少数 ...
- java8 Lambda Stream collect Collectors 常用实例
将一个对象的集合转化成另一个对象的集合 List<OrderDetail> orderDetailList = orderDetailService.listOrderDetails(); ...
- java8 两个list合并_深入介绍和使用 Java 8 的 Collector 接口和 Collectors 工具类
1 概述 java.util.stream.Collector: Collector 接口用于将 Stream 流中的数据加工,转换,处理,最后返回结果. java.util.stream.Colle ...
- java8中 Collectors.groupingBy用法
目录 1.数据准备: 2.分组 按照类目分组: 按照几个属性拼接分组: 根据不同条件分组 3.多级分组 4.按子组收集数据 求总数 求和 把收集器的结果转换为另一种类型 联合其他收集器 Collect ...
最新文章
- Vue项目中使用wangEditor富文本输入框(推荐)
- 知乎热议!一个博士生接受怎样的训练是完整的科研训练?
- 天翼云从业认证(4.12) 天翼云医疗行业解决方案
- 决策树随机森林GBDT
- three 天空球_javascript – 分配给相机的three.js天空盒
- JS中关于clientWidth、offsetWidth、scrollWidth
- Hibernate java.lang.ClassCastException ERROR解决方法
- HYSBZ 2145	悄悄话
- 神牛驾到!James B. Orlin 的 O(nm)最大流算法论文翻译!!
- 7.10 18级多校适应训练1题解
- linux文件l是什么意思,linux 中 我看到lrwxrwxrwx 那个l是什么意思?
- elememt ui 组件 dialog使用备忘
- PHP PYTHON RUBY PERL
- Xftp:找不到匹配的outgoing encryption算法
- JS判断当前页面是否在微信内打开
- 查找java最耗费CPU线程的命令
- chatbot聊天机器人环境搭建以及项目运行指南
- 毕业后我这操蛋的五年
- grid布局浏览器兼容_Grid布局
- 转载:区块链:关于软分叉与硬分叉以及什么是共识
热门文章
- android 圆形头像方案,android圆形头像实现
- Pimple研究及PHP框架搭建
- 车马邮件都慢,一生只够爱一个人
- http.cn portal.php,短网址,短网址生成,短链接,网址缩短_ft12.com短网址
- 只要你足够好——写给理想受挫的人们
- mysql force index 语法_MySQL FORCE INDEX 强制索引使用
- Unity开发手游在Android平台的内存优化
- 红孩儿编辑器的详细设计第四部分
- 初识Cura3D打印开源项目
- 关于阿里云的直播API开发