亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解Java8新特性Stream之list轉map及問題解決

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

List集合轉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轉換map
Map<String, String> map = list.stream().collect(Collectors.toMap(Person::getId, Person::getName));
  System.out.println(map);

輸出結果為:

在這里插入圖片描述

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

問題解決?。。?/strong>

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

在這里插入圖片描述

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

在這里插入圖片描述

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

1.重復時用后面的value 覆蓋前面的value

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

輸出結果:

在這里插入圖片描述

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

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

輸出結果:

在這里插入圖片描述

3.重復時將重復key的數據組成集合

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);

輸出結果:

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

解決方法:在轉換流中加上判空,即便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);

輸出結果為:

在這里插入圖片描述

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • springcloud集成skywalking實現全鏈路追蹤

    springcloud集成skywalking實現全鏈路追蹤

    在微服務治理中,springcloud也是技術選型中的一個成熟的解決方案,而且相對dubbo來說,springcloud涉及到的微服務組件更多,調用鏈路可能更復雜,本文將詳細介紹下如何在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)保護角度考慮,通常會對流量進行限流;不但在工作中要頻繁使用,而且也是面試中的高頻考點。本文就為大家整理了5種Java中常見限流算法,需要的可以參考一下
    2023-04-04
  • java中Path和ClassPath用法比較

    java中Path和ClassPath用法比較

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

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

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

    Java Socket實現傳輸壓縮對象的方法示例

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

    Maven-POM文件及組成部分

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

    快速解決List集合add元素,添加多個對象出現重復的問題

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

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

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

    springboot配置ldaps連接方式

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

最新評論