电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

Java lambda list轉換map時,把多個參數拼接作為key操作

瀏覽:131日期:2022-08-26 11:51:01

我就廢話不多說了,大家還是直接看代碼吧~

Map<String, Parts> partsMap = synList.stream().collect(Collectors.toMap(k ->

k.getOe()+k.getOeId()+k.getPartGroupId()+k.getStdPartId()+k.getBrandCode(), part -> part));

補充知識:Java8 Collectors.toMap的兩個大坑

Collectors.toMap()方法的正常使用示例

List<StudentDTO> studentDTOS = Lists.newArrayList();studentDTOS.add(new StudentDTO(1,'xixi'));studentDTOS.add(new StudentDTO(2,'houhou'));studentDTOS.add(new StudentDTO(3,'maomi'));Map<Integer, String> collect = studentDTOS.stream().collect( Collectors.toMap(StudentDTO::getStudentId, StudentDTO::getStudentName));System.out.println(JSON.toJSON(collect)); // {'1':'xixi','2':'houhou','3':'maomi'}

一. 坑1:Duplicate Key時拋出IllegalStateException異常

1. 概述

按照常規Java的Map思維,往一個map里put一個已經存在的key,會把原有的key對應的value值覆蓋。

但Java8中的Collectors.toMap()卻不是這樣。當key重復時,該方法默認會拋出IllegalStateException異常。

2. 大坑復現

public void streamToMap1() { List<StudentDTO> studentDTOS = Lists.newArrayList(); studentDTOS.add(new StudentDTO(1,'xixi')); studentDTOS.add(new StudentDTO(1,'houhou')); studentDTOS.add(new StudentDTO(3,'maomi')); Map<Integer, String> collect = studentDTOS.stream() .collect(Collectors.toMap(StudentDTO::getStudentId, StudentDTO::getStudentName)); System.out.println(JSON.toJSON(collect)); }

輸出結果

Java lambda list轉換map時,把多個參數拼接作為key操作

3. 大坑解決

法1:將toMap方法修改成如下形式,這樣就可以使用新的value覆蓋原有value。

studentDTOS.stream().collect(Collectors.toMap(StudentDTO::getStudentId,

StudentDTO::getStudentName,(oldValue, newValue) -> newValue));

輸出結果:{'1':'houhou','3':'maomi'}

法2:如果需要保留同一個key下所有的值,則可以對value做簡單的拼接,如下:

studentDTOS.stream().collect(Collectors.toMap(StudentDTO::getStudentId,

StudentDTO::getStudentName,(oldValue, newValue) -> oldValue + ',' + newValue));

輸出結果:

{'1':'xixi,houhou','3':'maomi'}

二. 坑2:value為空時拋出NullPointerException異常

1. 概述

當要轉化的map的value值中包含空指針時, 會拋出NullPointerException異常。

2. 大坑復現

public void streamToMap2() { List<StudentDTO> studentDTOS = Lists.newArrayList(); studentDTOS.add(new StudentDTO(1,'xixi')); studentDTOS.add(new StudentDTO(2,'houhou')); studentDTOS.add(new StudentDTO(3,null)); Map<Integer, String> collect = studentDTOS.stream().collect(Collectors .toMap(StudentDTO::getStudentId, StudentDTO::getStudentName)); System.out.println(JSON.toJSON(collect));}

輸出結果

Java lambda list轉換map時,把多個參數拼接作為key操作

3. 大坑解決

3.1 法1:value值判空設置

說明:如果是null,則設置成一個特定值。

studentDTOS.stream().collect(Collectors.toMap(StudentDTO::getStudentId, studentDTO

-> studentDTO.getStudentName()==null?'':studentDTO.getStudentName()));

輸出結果:

{'1':'xixi','2':'houhou','3':''}

3.2 法2:使用collect(Supplier<R> supplier, BiConsumer<R, ? super T> accumulator, BiConsumer<R, R> combiner)方法構建

說明:該方法允許null值。

Map<Integer, String> collect = studentDTOS.stream().collect(HashMap::new, (n, v) -> n.put(v.getStudentId(), v.getStudentName()), HashMap::putAll);for(Map.Entry<Integer, String> entry:collect.entrySet()){ System.out.println(entry.getKey()+'='+entry.getValue());}

輸出結果

1=xixi2=houhou3=null

3.3 使用Optional對值進行包裝

Map<Integer, Optional<String>> collect = studentDTOS.stream().collect(Collectors .toMap(StudentDTO::getStudentId, studentDTO -> Optional.ofNullable(studentDTO.getStudentName()))); for(Map.Entry<Integer, Optional<String>> entry:collect.entrySet()){ System.out.println(entry.getKey()+'='+entry.getValue().orElse(''));}

輸出結果

1=xixi2=houhou3=

以上這篇Java lambda list轉換map時,把多個參數拼接作為key操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
主站蜘蛛池模板: 哲力实业_专注汽车涂料汽车漆研发生产_汽车漆|修补油漆品牌厂家 长沙一级消防工程公司_智能化弱电_机电安装_亮化工程专业施工承包_湖南公共安全工程有限公司 | 气动|电动调节阀|球阀|蝶阀-自力式调节阀-上海渠工阀门管道工程有限公司 | 北京百度网站优化|北京网站建设公司-百谷网络科技 | 大白菜官网,大白菜winpe,大白菜U盘装系统, u盘启动盘制作工具 | 自动化生产线-自动化装配线-直流电机自动化生产线-东莞市慧百自动化有限公司 | YJLV22铝芯铠装电缆-MYPTJ矿用高压橡套电缆-天津市电缆总厂 | 上海公众号开发-公众号代运营公司-做公众号的公司企业服务商-咏熠软件 | 脉冲除尘器,除尘器厂家-淄博机械 | 珠光砂保温板-一体化保温板-有釉面发泡陶瓷保温板-杭州一体化建筑材料 | 信阳网站建设专家-信阳时代网联-【信阳网站建设百度推广优质服务提供商】信阳网站建设|信阳网络公司|信阳网络营销推广 | 上海质量认证办理中心| 蓝米云-专注于高性价比香港/美国VPS云服务器及海外公益型免费虚拟主机 | 执业药师报名条件,考试时间,考试真题,报名入口—首页 | 管形母线,全绝缘铜管母线厂家-山东佰特电气科技有限公司 | 广东恩亿梯电源有限公司【官网】_UPS不间断电源|EPS应急电源|模块化机房|电动汽车充电桩_UPS电源厂家(恩亿梯UPS电源,UPS不间断电源,不间断电源UPS) | 油缸定制-液压油缸厂家-无锡大鸿液压气动成套有限公司 | 篷房[仓储-婚庆-展览-活动]生产厂家-江苏正德装配式帐篷有限公司 | 恒温水槽与水浴锅-上海熙浩实业有限公司 | 厂厂乐-汇聚海量采购信息的B2B微营销平台-厂厂乐官网 | 云阳人才网_云阳招聘网_云阳人才市场_云阳人事人才网_云阳人家招聘网_云阳最新招聘信息 | 2025福建平潭岛旅游攻略|蓝眼泪,景点,住宿攻略-趣平潭网 | STRO|DTRO-STRO反渗透膜(科普)_碟滤 | 劳动法网-专业的劳动法和劳动争议仲裁服务网 | 安全,主动,被动,柔性,山体滑坡,sns,钢丝绳,边坡,防护网,护栏网,围栏,栏杆,栅栏,厂家 - 护栏网防护网生产厂家 | 咖啡加盟-咖啡店加盟-咖啡西餐厅加盟-塞纳左岸咖啡西餐厅官网 | 无线讲解器-导游讲解器-自助讲解器-分区讲解系统 品牌生产厂家[鹰米讲解-合肥市徽马信息科技有限公司] | 金环宇|金环宇电线|金环宇电缆|金环宇电线电缆|深圳市金环宇电线电缆有限公司|金环宇电缆集团 | 山东PE给水管厂家,山东双壁波纹管,山东钢带增强波纹管,山东PE穿线管,山东PE农田灌溉管,山东MPP电力保护套管-山东德诺塑业有限公司 | 保镖公司-私人保镖-深圳保镖公司【环宇兄弟保镖】 | 菏泽商标注册_菏泽版权登记_商标申请代理_菏泽商标注册去哪里 | 齿轮减速电机一体机_蜗轮蜗杆减速马达-德国BOSERL齿轮减速机带电机生产厂家 | 微型气象仪_气象传感器_防爆气象传感器-天合传感器大全 | 济南冷库安装-山东冷库设计|建造|冷库维修-山东齐雪制冷设备有限公司 | 美的商用净水器_美的直饮机_一级代理经销商_Midea租赁价格-厂家反渗透滤芯-直饮水批发品牌售后 | 神马影院-实时更新秒播 | 罗氏牛血清白蛋白,罗氏己糖激酶-上海嵘崴达实业有限公司 | lcd条形屏-液晶长条屏-户外广告屏-条形智能显示屏-深圳市条形智能电子有限公司 | b2b网站大全,b2b网站排名,找b2b网站就上地球网 | 考勤系统_人事考勤管理系统_本地部署BS考勤系统_考勤软件_天时考勤管理专家 | 胶原检测试剂盒,弹性蛋白检测试剂盒,类克ELISA试剂盒,阿达木单抗ELISA试剂盒-北京群晓科苑生物技术有限公司 | LED灯杆屏_LED广告机_户外LED广告机_智慧灯杆_智慧路灯-太龙智显科技(深圳)有限公司 |