Collections toMap各种坑

文章目录

  • Collections.toMap作用
  • 存在的各种坑
    • 空指针
    • key值重复

Collections.toMap作用

将list按照规则转成map。

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

存在的各种坑

  1. 空指针
  2. key值重复

空指针

描述问题:当value为null的时候会抛出异常(Book::getName)

解决方案

点这里查看文章.

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

点赞最高的解决方案,其实跟你手动foreach一毛一样。

我个人的解决方案

就是在Book的这个Name获取函数getName进行判断是否为null,是的话返回一个空字符串。燃鹅:它在那个链接里面点赞数是负数,西西。

key值重复

如果说key值一样也会报错,需要调用它的另一个函数:

public static void main(String[] args) {
        List list = new ArrayList<>();
        ContentAnnouncement contentAnnouncement = new ContentAnnouncement();
        contentAnnouncement.setTitle("1");
        contentAnnouncement.setAnnouncement("2");
        list.add(contentAnnouncement);
        ContentAnnouncement contentAnnouncement1 = new ContentAnnouncement();
        contentAnnouncement1.setTitle("3");
        contentAnnouncement1.setAnnouncement(null);
        list.add(contentAnnouncement1);
        Map 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,后面的都去掉

你可能感兴趣的:(Collections toMap各种坑)