Collections.toMap 報錯 空指針 & key重復


Collections.toMap作用

將list按照規則轉成map。

books.stream().collect(Collectors.toMap(Book::getIsbn, Book::getName));

存在的各種坑
空指針
key值重復

空指針 & key重復

重復key 后邊會覆蓋前邊的值

描述問題:當value為null的時候會拋出異常(Book::getName)


Map<Integer, Boolean> collect = list.stream()
        .collect(HashMap::new, (m,v)->m.put(v.getId(), v.getAnswer()), HashMap::putAll);

點贊最高的解決方案,其實跟你手動foreach一毛一樣。
https://stackoverflow.com/questions/24630963/java-8-nullpointerexception-in-collectors-tomap

只key值重復 解決

如果說key值一樣也會報錯,需要調用它的另一個函數:

public static void main(String[] args) {
        List<ContentAnnouncement> list = new ArrayList<>();
        Map<String, String> map = list.stream().collect(Collectors.toMap(ContentAnnouncement::getTitle, ContentAnnouncement::getAnnouncement, (e1, e2) -> e1));
        map.forEach((key, value) -> System.out.println(key + " " + value));
    }

(e1, e2) -> e1)這個是如果出現重復key一樣,會只保存之前的value,后面的都去掉


免責聲明!

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



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