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值一样也会报错,需要调用它的另一个函数:

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,后面的都去掉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值