国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

java-ee - java8的Collectors.reducing()

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

問(wèn)題描述

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

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

問(wèn)題解答

回答1:

若v1是null的話,那就說(shuō)明operationInfos集合里面是有null的,因?yàn)槭且鶕?jù)OperationCountVO的cityId進(jìn)行分組,那OperationCountVO一定不為null,建議前面直接加filter過(guò)濾掉

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

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

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

比如直接在本類(lèi)上新增一個(gè)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));

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

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

這樣快多了噻,還不會(huì)報(bào)錯(cuò),哈哈

標(biāo)簽: java
相關(guān)文章:
主站蜘蛛池模板: 男女男免费视频网站国产 | 亚洲欧美日韩精品高清 | 频黄| 欧美一区视频在线 | 成人性欧美丨区二区三区 | 日韩视频专区 | 免费播放欧美毛片 | 亚洲国产精品一区二区九九 | 亚洲精品无码不卡在线播放he | 欧美二级在线观看免费 | 日本久久伊人 | 一级做a爰片久久毛片人呢 一级做a爰片久久毛片唾 | 性夜影院爽黄a爽免费看网站 | 亚洲自拍成人 | 毛片免费大全 | 一 级 黄 色 大片 | 亚洲一区二区三区首页 | 亚洲国产精品综合久久一线 | 无国产精品白浆是免费 | 色偷偷女男人的天堂亚洲网 | 一本色道久久综合亚洲精品 | 性欧美精品孕妇 | 欧美日韩亚洲v在线观看 | 亚洲成aⅴ人在线观看 | 贵州美女一级纯黄大片 | 欧美视频在线观 | 欧美影院网站视频观看 | 喷潮白浆| 免费国产a理论片 | 久久久久久青草大香综合精品 | 国产三级精品播放 | 欧美亚洲国产片在线观看 | 亚洲天堂日韩在线 | 免费中文字幕一级毛片 | 欧美三级一区二区 | 久久国产精品夜色 | 久久欧美精品欧美九久欧美 | 亚洲第一黄色网 | 久久久久久国产精品免费免 | 亚洲rct中文字幕在线 | 欧美一区二区在线观看免费网站 |