欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2020年08月22日 14:55:36   作者:feiwuguohai  
這篇文章主要介紹了Java lambda list轉(zhuǎn)換map時(shí),把多個參數(shù)拼接作為key操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧

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

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

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時(shí)拋出IllegalStateException異常

1. 概述

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

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

2. 大坑復(fù)現(xiàn)

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é)果

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為空時(shí)拋出NullPointerException異常

1. 概述

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

2. 大坑復(fù)現(xiàn)

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é)果

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值。

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=xixi
2=houhou
3=null

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

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=xixi
2=houhou
3=

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

相關(guān)文章

  • 在Spring環(huán)境中正確關(guān)閉線程池的姿勢

    在Spring環(huán)境中正確關(guān)閉線程池的姿勢

    這篇文章主要介紹了在Spring環(huán)境中正確關(guān)閉線程池的姿勢,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • SpringData JPA中查詢接口Repository的使用

    SpringData JPA中查詢接口Repository的使用

    本文主要介紹了SpringData JPA中查詢接口Repository的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Java實(shí)現(xiàn)二叉樹的建立、計(jì)算高度與遞歸輸出操作示例

    Java實(shí)現(xiàn)二叉樹的建立、計(jì)算高度與遞歸輸出操作示例

    這篇文章主要介紹了Java實(shí)現(xiàn)二叉樹的建立、計(jì)算高度與遞歸輸出操作,結(jié)合實(shí)例形式分析了Java二叉樹的創(chuàng)建、遍歷、計(jì)算等相關(guān)算法實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-03-03
  • Java成員變量與局部變量(動力節(jié)點(diǎn)Java學(xué)院整理)

    Java成員變量與局部變量(動力節(jié)點(diǎn)Java學(xué)院整理)

    這篇文章主要介紹了Java成員變量與局部變量的相關(guān)資料,非常不錯,具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-04-04
  • 深入理解Java的接口與抽象類

    深入理解Java的接口與抽象類

    本文主要介紹java 的接口和抽象類,對接口和抽象類進(jìn)行介紹對比,深入理解,有需要的小伙伴可以參考下
    2016-07-07
  • Java多線程中線程的兩種創(chuàng)建方式及比較代碼示例

    Java多線程中線程的兩種創(chuàng)建方式及比較代碼示例

    這篇文章主要介紹了Java多線程中線程的兩種創(chuàng)建方式及比較代碼示例,簡單介紹了線程的概念,并行與并發(fā)等,然后通過實(shí)例代碼向大家展示了線程的創(chuàng)建,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Java中ConcurrentHashMap是如何實(shí)現(xiàn)線程安全

    Java中ConcurrentHashMap是如何實(shí)現(xiàn)線程安全

    ConcurrentHashMap是一個哈希表,支持檢索的全并發(fā)和更新的高預(yù)期并發(fā)。本文主要介紹了Java中ConcurrentHashMap是如何實(shí)現(xiàn)線程安全,感興趣的可以了解一下
    2021-11-11
  • SpringBoot配置文件properties和yml的實(shí)現(xiàn)

    SpringBoot配置文件properties和yml的實(shí)現(xiàn)

    本文主要介紹了SpringBoot配置文件properties和yml的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • SpringBoot中application.properties、application.yaml、application.yml區(qū)別

    SpringBoot中application.properties、application.yaml、applicati

    本文主要介紹了SpringBoot中application.properties、application.yaml、application.yml區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • 運(yùn)行Springboot測試類查詢數(shù)據(jù)庫數(shù)據(jù)顯示白網(wǎng)頁問題及解決方法

    運(yùn)行Springboot測試類查詢數(shù)據(jù)庫數(shù)據(jù)顯示白網(wǎng)頁問題及解決方法

    Spring Boot應(yīng)用未能啟動的原因是它沒有找到合適的數(shù)據(jù)庫配置具體來說,它需要一個數(shù)據(jù)源(DataSource),但未能在你的配置中找出,也沒有找到任何嵌入式數(shù)據(jù)庫(H2, HSQL 或 Derby),本文給大家分享運(yùn)行Springboot測試類查詢數(shù)據(jù)庫數(shù)據(jù)顯示白網(wǎng)頁問題及解決方法,一起看看吧
    2023-11-11

最新評論