Map<Integer, OperationCountVO> collect = operationInfos.stream().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;
})));
Wahrscheinlich möchte ich die operationInfos-Sammlung nach der darin enthaltenen cityId gruppieren und dann, wenn die cityId dieselbe ist, den SurgeryCount des Objekts hinzufügen und zurückgeben, aber jetzt ist die erste v1 null,
Execute v1.setSurgeryCount(v1. getSurgeryCount() + v2.getSurgeryCount()); hat einen Nullzeiger gemeldet. Stimmt etwas mit der Stelle, an der ich ihn geschrieben habe?
若
v1
是null
的话,那就说明operationInfos
集合里面是有null
的,因为是要根据OperationCountVO
的cityId
进行分组,那OperationCountVO
一定不为null,建议前面直接加filter
过滤掉刚评论发现...可能报错原因还有可能是,
Collectors.reducing
中的第一个参数为new OperationCountVO()
,若new
出来的OperationCountVO
对象的surgeryCount
为Integer
类型,不是基本类型的话,所以没有初始化,surgeryCount
就为null
,在做v1.getSurgeryCount() + v2.getSurgeryCount()
操作的时候就可能报错了呀(ps:对于
reducing
中的第二个参数BinaryOperator
,最好还是封装到OperationCountVO
对象中,看起来代码更声明式一点...这样写代码太丑了...哈哈...或者写出来,写成一个静态final变量更好,到时候可以到处调用嘛)比如直接在本类上新增一个
SurgeryCount
属性合并的BinaryOperator
,名字就叫surgeryCountMerge
这样下面代码就可以改成
这样写了之后,其实发现题主可能做麻烦了点,最后不就是为了返回一个
Map
嘛,所以建议不使用groupingBy
,毕竟分组返回结果是一对多这样的结构,不是一对一的结构,那直接使用toMap
嘛,直接点这样快多了噻,还不会报错,哈哈