Collections toMap各种坑

Collections.toMap作用

将list按照规则转成map。

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

存在的各种坑

  1. 空指针
  2. 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一毛一样。

我个人的解决方案

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

key值重复

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

扫描二维码关注公众号,回复: 8824533 查看本文章
public static void main(String[] args) {
        List<ContentAnnouncement> 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<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,后面的都去掉

发布了213 篇原创文章 · 获赞 31 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/weixin_38336658/article/details/101698244