關於使用stream將list轉map時,key重復導致報錯問題


要將List對象集合轉為map集合,可以通過stream流的形式快速實現轉換:

//三個Users對象組成一個List集合
List<Users> list = new ArrayList<>();
list.add(Users.builder().userName("11").userId(1).build());
list.add(Users.builder().userName("11").userId(2).build());
list.add(Users.builder().userName("33").userId(3).build());

//將list轉map
Map<String, Users> usersMap = list.stream()
    .collect(Collectors.toMap(Users::getUserName, user -> user));
System.out.println(usersMap.get("11"));

但是上述代碼運行后報了異常:

意思為map中出現了重復的key,也就是說通過上述方法轉map時,出現重復key並不會出現覆蓋的情況,而是再次在map中添加一個重復的key,導致報錯。

所以通過stream實現list轉map時,要實現重復的key會被覆蓋,可以使用Function.identity()方法:

//三個Users對象組成一個List集合
List<Users> list = new ArrayList<>();
list.add(Users.builder().userName("11").userId(1).build());
list.add(Users.builder().userName("11").userId(2).build());
list.add(Users.builder().userName("33").userId(3).build());

//將list轉map,這里是出現重復key時,覆蓋前一個
Map<String, Users> usersMap = list.stream()
    .collect(Collectors.toMap(Users::getUserName, Function.identity(), (user1, user2) -> user2));
System.out.println(usersMap.get("11"));
//輸出結果:
edu.nf.ch08.entity.Users@41aaedaa

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM