91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-08-21 14:50:16 來源:腳本之家 閱讀:982 作者:菜鳥驛站 欄目:編程語言

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

輸出結果為:

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

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

問題解決!!!

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

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

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

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

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

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

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

輸出結果:

詳解Java8新特性Stream之list轉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);

輸出結果:

詳解Java8新特性Stream之list轉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);

輸出結果:

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

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

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

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

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

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

輸出結果為:

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

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

岳池县| 醴陵市| 淮滨县| 雅安市| 昌吉市| 兴城市| 云林县| 兴海县| 应城市| 庆阳市| 桂东县| 星子县| 县级市| 柞水县| 安阳市| 依安县| 湄潭县| 沈阳市| 锦州市| 玛沁县| 彩票| 达孜县| 荔波县| 杂多县| 女性| 乌兰察布市| 莎车县| 宝坻区| 苗栗县| 正安县| 柳江县| 泗水县| 长武县| 本溪市| 德阳市| 德江县| 万荣县| 靖远县| 枣阳市| 扎鲁特旗| 建水县|