国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

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

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

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

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

這篇文章主要介紹了Java lambda list轉(zhuǎn)換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));

補(bǔ)充知識: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對應(yīng)的value值覆蓋。

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

2. 大坑復(fù)現(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));
}

輸出結(jié)果

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

3. 大坑解決

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

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

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

輸出結(jié)果:{"1":"houhou","3":"maomi"}

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

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

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

輸出結(jié)果:

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

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

1. 概述

當(dāng)要轉(zhuǎn)化的map的value值中包含空指針時, 會拋出NullPointerException異常。

2. 大坑復(fù)現(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));
}

輸出結(jié)果

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

3. 大坑解決

3.1 法1:value值判空設(shè)置

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

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

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

輸出結(jié)果:

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

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

說明:該方法允許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());
}

輸出結(jié)果

?
1
2
3
1=xixi
2=houhou
3=null

3.3 使用Optional對值進(jìn)行包裝

?
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(""));
}

輸出結(jié)果

?
1
2
3
1=xixi
2=houhou
3=

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

原文鏈接: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 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 亚洲欧洲在线观看 | a级片在线观看 | 亚洲精品电影网在线观看 | 国产成人在线一区二区 | 欧美黄色a视频 | 在线播放视频一区二区 | 黄色毛片网站在线观看 | 亚色成人 | 久久久久久成人 | 午夜网址 | 日韩精品视频免费在线观看 | 中文字幕亚洲一区 | 夜夜久久| 九九综合| 精品日韩在线观看 | 日韩二区 | 亚洲精品二区 | 欧美日韩国产一区二区三区 | 人人99 | 成人在线观看免费视频 | 每日更新亚洲 | 成人午夜视频在线观看 | 亚洲视频免费观看 | 在线a视频 | 一级毛片免费看 | 成人综合视频在线 | 在线观看成人 | 色天堂视频| 亚洲成人精品 | 日韩有码一区二区三区 | 国产精品国产精品国产专区不片 | 成人a视频在线观看 | 国产成人在线看 | 欧州一区二区三区 | 日韩中文一区 | 色婷婷国产精品免费网站 | 久久99视频这里只有精品 | 久久国产亚洲精品 | 久久机热 | 欧美电影网站 | 日韩精品一区二区三区丰满 |