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

詳解Java8新特性Stream之list轉(zhuǎn)map及問題解決

 更新時間:2019年09月19日 10:51:29   作者:菜鳥驛站  
這篇文章主要介紹了詳解Java8新特性Stream之list轉(zhuǎn)map及問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

List集合轉(zhuǎn)Map,用到的是Stream中Collectors的toMap方法:Collectors.toMap

具體用法實例如下:

//聲明一個List集合
List<Person> list = new ArrayList(); 
  list.add(new Person("1001", "小A")); 
  list.add(new Person("1002", "小B")); 
  list.add(new Person("1003", "小C"));
  System.out.println(list);
//將list轉(zhuǎn)換map
Map<String, String> map = list.stream().collect(Collectors.toMap(Person::getId, Person::getName));
  System.out.println(map);

輸出結(jié)果為:

在這里插入圖片描述

注意:用Collectors的toMap方法轉(zhuǎn)換List,一般會遇到兩個問題。一個是轉(zhuǎn)換map,key重復(fù)問題;另一個是空指針異常,即轉(zhuǎn)為map的value是null。

問題解決?。?!

一、第一種問題報的錯誤如下:Duplicate key

在這里插入圖片描述

原因是聲明List集合時,有的值重復(fù),如圖:

在這里插入圖片描述

解決方法:(分三種,具體哪種看業(yè)務(wù)需求)

1.重復(fù)時用后面的value 覆蓋前面的value

Map<String, String> map = list.stream().collect(Collectors.toMap(Person::getId, Person::getName,(key1 , key2)-> key2 ));
  System.out.println(map); 

輸出結(jié)果:

在這里插入圖片描述

2.重復(fù)時將前面的value 和后面的value拼接起來;

Map<String, String> map = list.stream().collect(Collectors.toMap(Person::getId, Person::getName,(key1 , key2)-> key1+","+key2 ));
  System.out.println(map);

輸出結(jié)果:

在這里插入圖片描述

3.重復(fù)時將重復(fù)key的數(shù)據(jù)組成集合

Map<String, List<String>> map = list.stream().collect(Collectors.toMap(Person::getId,
	 		p -> {
	 		 	List<String> getNameList = new ArrayList<>();
	 		 		getNameList.add(p.getName());
	 		 		return getNameList;
	 		 	},
 		  	(List<String> value1, List<String> value2) -> {
 		  		value1.addAll(value2);
 		  		return value1;
 		  	}
	 		 ));
  
   System.out.println(map);

輸出結(jié)果:

在這里插入圖片描述

二、第二種問題報的錯誤如下:NullPointerException

在這里插入圖片描述

原因是聲明List集合時有的值為空(如圖),但是HashMap中k,v是可以存null值的。

在這里插入圖片描述

解決方法:在轉(zhuǎn)換流中加上判空,即便value為空,依舊輸出。(與上面方法三相同)

Map<String, List<String>> map = list.stream().collect(Collectors.toMap(Person::getId,
	 		p -> {
	 		 	List<String> getNameList = new ArrayList<>();
	 		 		getNameList.add(p.getName());
	 		 		return getNameList;
	 		 	},
 		  	(List<String> value1, List<String> value2) -> {
 		  		value1.addAll(value2);
 		  		return value1;
 		  	}
	 		 ))
   System.out.println(map);

輸出結(jié)果為:

在這里插入圖片描述

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • springcloud集成skywalking實現(xiàn)全鏈路追蹤

    springcloud集成skywalking實現(xiàn)全鏈路追蹤

    在微服務(wù)治理中,springcloud也是技術(shù)選型中的一個成熟的解決方案,而且相對dubbo來說,springcloud涉及到的微服務(wù)組件更多,調(diào)用鏈路可能更復(fù)雜,本文將詳細(xì)介紹下如何在springcloud中集成skywalking,需要的朋友可以參考下
    2024-01-01
  • Mybatis如何直接執(zhí)行SQL語句

    Mybatis如何直接執(zhí)行SQL語句

    這篇文章主要介紹了Mybatis如何直接執(zhí)行SQL語句,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 詳解5種Java中常見限流算法

    詳解5種Java中常見限流算法

    在高并發(fā)系統(tǒng)中,出于系統(tǒng)保護(hù)角度考慮,通常會對流量進(jìn)行限流;不但在工作中要頻繁使用,而且也是面試中的高頻考點。本文就為大家整理了5種Java中常見限流算法,需要的可以參考一下
    2023-04-04
  • java中Path和ClassPath用法比較

    java中Path和ClassPath用法比較

    在本篇文章里小編給大家分享了關(guān)于java中Path和ClassPath用法比較內(nèi)容,有需要的朋友們學(xué)習(xí)下。
    2019-01-01
  • EL調(diào)用Java方法_動力節(jié)點Java學(xué)院整理

    EL調(diào)用Java方法_動力節(jié)點Java學(xué)院整理

    簡單來說,我們在一個類中的某個方法,可以使用EL進(jìn)行調(diào)用,這個能被EL表達(dá)式調(diào)用的方法稱之為EL函數(shù),但是這種方式必須滿足兩點要求,具體哪兩點,大家可以參考下本文
    2017-07-07
  • Java Socket實現(xiàn)傳輸壓縮對象的方法示例

    Java Socket實現(xiàn)傳輸壓縮對象的方法示例

    這篇文章主要介紹了Java Socket實現(xiàn)傳輸壓縮對象的方法,結(jié)合具體實例形式分析了java socket針對數(shù)據(jù)的壓縮、傳輸、接收、解壓縮等操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2017-06-06
  • Maven-POM文件及組成部分

    Maven-POM文件及組成部分

    POM是用于描述Maven項目的配置文件,它包含了項目構(gòu)建、依賴管理和其他相關(guān)配置的信息,這篇文章主要介紹了Maven-POM文件,需要的朋友可以參考下
    2023-06-06
  • 快速解決List集合add元素,添加多個對象出現(xiàn)重復(fù)的問題

    快速解決List集合add元素,添加多個對象出現(xiàn)重復(fù)的問題

    這篇文章主要介紹了快速解決List集合add元素,添加多個對象出現(xiàn)重復(fù)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Java多線程環(huán)境下使用的集合類示例詳解

    Java多線程環(huán)境下使用的集合類示例詳解

    這篇文章主要給大家介紹了關(guān)于Java多線程環(huán)境下使用的集合類的相關(guān)資料,開發(fā)過程中經(jīng)常遇到這種需求,文中通過代碼示例和圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • springboot配置ldaps連接方式

    springboot配置ldaps連接方式

    這篇文章主要介紹了springboot配置ldaps連接方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05

最新評論