亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

java-ee - java8的Collectors.reducing()

瀏覽:79日期: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進行分組,然后cityId一樣的話,把對象的SurgeryCount加起來返回,但是現在 第一次的v1是null,執行v1.setSurgeryCount(v1.getSurgeryCount() + v2.getSurgeryCount());的時候報了空指針,我哪里寫的有問題嗎?

問題解答

回答1:

若v1是null的話,那就說明operationInfos集合里面是有null的,因為是要根據OperationCountVO的cityId進行分組,那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; })));

剛評論發現...可能報錯原因還有可能是,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<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));

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

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

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

標簽: java
相關文章:
主站蜘蛛池模板: 一色屋精品亚洲香蕉网站 | 香蕉视频最新网址 | 亚洲精品国产电影午夜 | 国产亚洲精彩视频 | a级国产乱理论片在线观看看 | 欧美一级欧美一级毛片 | 免费看欧美一级特黄a大片一 | 爱爱小视频免费体验区在线观看 | 嫩草影院麻豆久久视频 | 麻豆精品国产免费观看 | 达达兔欧美午夜国产亚洲 | 免费国产成人高清视频网站 | 伊人伊成久久人综合网777 | 黄色网址免费大全 | 一级特黄aa大片一又好看 | 久久99热狠狠色一区二区 | 老司机观看精品一区二区 | 国产精品爱久久久久久久三级 | 黄色片在线观看网址 | 国产免费高清视频在线观看不卡 | 亚洲国产精品ⅴa在线观看 亚洲国产精品aaa一区 | 日韩在线二区全免费 | 玖玖玖视频在线观看视频6 玖玖视频精品 | 色综合久久久久久 | 一木道一二三区精品 | 97精品高清一区二区三区 | 香蕉久久网站 | 成人亚洲欧美日韩在线观看 | 中文字幕亚洲一区二区v@在线 | 亚洲国产一级毛片 | 欧美一级淫片吊带丝袜 | 国产91福利在线精品剧情尤物 | 亚洲精品中文字幕乱码一区二区 | 国产最新精品2020好看的 | 真实国产乱子伦精品一区二区三区 | 91精品日本久久久久久牛牛 | 国产性精品 | 欧美在线看欧美高清视频免费 | 日韩欧美成人乱码一在线 | 亚洲精品乱无伦码 | 日本成a人片在线观看网址 日本成人一区二区 |