激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java lambda list轉換map時,把多個參數(shù)拼接作為key操作

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

2020-08-24 00:25feiwuguohai Java教程

這篇文章主要介紹了Java lambda list轉換map時,把多個參數(shù)拼接作為key操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

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

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()方法的正常使用示例

?
1
2
3
4
5
6
7
List<StudentDTO> studentDTOS = Lists.newArrayList();
studentDTOS.add(keyword">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. 概述

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

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

2. 大坑復現(xiàn)

?
1
2
3
4
5
6
7
8
9
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時,把多個參數(shù)拼接作為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. 大坑復現(xiàn)

?
1
2
3
4
5
6
7
8
9
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時,把多個參數(shù)拼接作為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值。

?
1
2
3
4
5
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
2
3
1=xixi
2=houhou
3=null

3.3 使用Optional對值進行包裝

?
1
2
3
4
5
6
7
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
2
3
1=xixi
2=houhou
3=

以上這篇Java lambda list轉換map時,把多個參數(shù)拼接作為key操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/feiwuguohai/article/details/80533278

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 男女羞羞的视频 | 91看片国产 | 午夜精品久久久久久久96蜜桃 | 99国产精成人午夜视频一区二区 | 国产一区二区视频观看 | 中国的免费的视频 | 在线成人免费观看 | 成人在线观看免费视频 | 久久99精品久久久久久236 | 中文字幕专区高清在线观看 | 亚洲午夜一区二区三区 | 久久久久性 | 午夜视频色| 斗罗破苍穹在线观看免费完整观看 | 99亚洲伊人久久精品影院红桃 | 久久久精品综合 | 精品一区二区6 | 操嫩草 | 久久国产秒 | 亚洲网站免费观看 | 午夜爱爱福利 | 中文字幕在线视频网站 | 久草在线新时代视觉 | 97久久人人超碰caoprom | 国产精品99精品 | 亚洲成人高清电影 | 亚洲成人福利在线观看 | 免费毛片电影 | 欧洲成人一区二区 | 久久草在线观看视频 | 国产精品视频一区二区三区综合 | 国产精品久久久久久久久久免 | 久久不雅视频 | 黄色免费观看网站 | 国产成人精品自拍视频 | 国产精品久久久久久久久久久久久久久 | 精品在线观看一区二区三区 | 亚洲一区动漫 | 国产精品久久久久久久av三级 | 精品亚洲午夜久久久久91 | 亚洲第一视频 |