av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術(shù)文章
文章詳情頁

java-ee - java8的Collectors.reducing()

瀏覽:116日期:2023-10-18 15:09:42

問題描述

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; })));

大概就是我想對operationInfos集合按照里面的cityId進(jìn)行分組,然后cityId一樣的話,把對象的SurgeryCount加起來返回,但是現(xiàn)在 第一次的v1是null,執(zhí)行v1.setSurgeryCount(v1.getSurgeryCount() + v2.getSurgeryCount());的時候報了空指針,我哪里寫的有問題嗎?

問題解答

回答1:

若v1是null的話,那就說明operationInfos集合里面是有null的,因為是要根據(jù)OperationCountVO的cityId進(jìn)行分組,那OperationCountVO一定不為null,建議前面直接加filter過濾掉

Map<Integer, OperationCountVO> 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; })));

剛評論發(fā)現(xiàn)...可能報錯原因還有可能是,Collectors.reducing中的第一個參數(shù)為new OperationCountVO(),若new出來的OperationCountVO對象的surgeryCount為Integer類型,不是基本類型的話,所以沒有初始化,surgeryCount就為null,在做v1.getSurgeryCount() + v2.getSurgeryCount()操作的時候就可能報錯了呀

(ps:對于reducing中的第二個參數(shù)BinaryOperator,最好還是封裝到OperationCountVO對象中,看起來代碼更聲明式一點...這樣寫代碼太丑了...哈哈...或者寫出來,寫成一個靜態(tài)final變量更好,到時候可以到處調(diào)用嘛)

比如直接在本類上新增一個SurgeryCount屬性合并的BinaryOperator,名字就叫surgeryCountMerge

public static final BinaryOperator<OperationCountVO> surgeryCountMerge = (v1, v2) -> { v1.setSurgeryCount(v1.getSurgeryCount() + v2.getSurgeryCount()); return v1;}

這樣下面代碼就可以改成

Map<Integer, OperationCountVO> collect = operationInfos.stream().filter(Objects::nonNull).collect(Collectors.groupingBy(OperationCountVO::getCityId,Collectors.reducing(new OperationCountVO(), surgeryCountMerge));

這樣寫了之后,其實發(fā)現(xiàn)題主可能做麻煩了點,最后不就是為了返回一個Map嘛,所以建議不使用groupingBy,畢竟分組返回結(jié)果是一對多這樣的結(jié)構(gòu),不是一對一的結(jié)構(gòu),那直接使用toMap嘛,直接點

Map<Integer, OperationCountVO> collect = operationInfos.stream().filter(Objects::nonNull).collect(Collectors.toMap(OperationCountVO::getCityId, Function.identity(), surgeryCountMerge));

這樣快多了噻,還不會報錯,哈哈

標(biāo)簽: java
相關(guān)文章:
主站蜘蛛池模板: 亚洲欧洲在线看 | 日本不卡一区二区三区在线观看 | 久久精品成人一区 | 日韩欧美三级电影在线观看 | 国产高清一区二区三区 | 99精品久久久久久中文字幕 | 日本不卡免费新一二三区 | 成人精品影院 | 中文在线观看视频 | www.youjizz.com日韩| 久久精品亚洲国产奇米99 | 天堂在线免费视频 | 伊人网伊人 | 草草精品 | 久久久国产精品视频 | 国产乱码精品1区2区3区 | 国产精品久久久久久久久图文区 | 亚洲综合一区二区三区 | 99精品久久久 | 在线视频 亚洲 | 二区中文字幕 | 日韩精品一二三区 | 激情五月婷婷 | 成人夜晚看av | 在线看无码的免费网站 | 一区二区三区视频在线 | 二区久久| 国产成人免费视频网站视频社区 | 三级国产三级在线 | 成年人在线视频 | 中文字幕免费 | 欧美在线一级 | 97精品国产97久久久久久免费 | 在线观看免费观看在线91 | 久久国产一区二区 | 国产成人在线视频 | 日韩在线视频一区 | 日干夜干 | 9999在线视频 | 亚洲精品电影在线 | 亚洲欧美在线观看 |