亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用Java將lambda list轉換map并實現拼接參數

發布時間:2020-11-07 16:44:14 來源:億速云 閱讀:937 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關利用Java將lambda list轉換map并實現拼接參數,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

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

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并實現拼接參數

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并實現拼接參數

3. 大坑解決

3.1 法1:value值判空設置

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

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

-> studentDTO.getStudentName()==null&#63;"":studentDTO.getStudentName()));

輸出結果:

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

3.2 法2:使用collect(Supplier<R> supplier, BiConsumer<R, &#63; 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=xixi
2=houhou
3=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=xixi
2=houhou
3=

以上就是利用Java將lambda list轉換map并實現拼接參數,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜丰县| 梅州市| 本溪市| 原平市| 中宁县| 囊谦县| 枣阳市| 施甸县| 苍山县| 疏勒县| 平舆县| 乌海市| 石渠县| 禹州市| 汶上县| 黄大仙区| 贵溪市| 阳原县| 武夷山市| 板桥市| 道孚县| 南投市| 普洱| 乐东| 禄丰县| 南岸区| 璧山县| 蓬莱市| 昌图县| 迁安市| 马龙县| 柘城县| 十堰市| 西宁市| 德清县| 石景山区| 惠州市| 淮北市| 华容县| 黄骅市| 丰顺县|