返回顶部
首页 > 资讯 > 后端开发 > JAVA >Collectors.toMap方法value值为null时的解决方案
  • 120
分享到

Collectors.toMap方法value值为null时的解决方案

javastream 2023-09-29 17:09:49 120人浏览 独家记忆
摘要

问题 发现Collectors.toMap的一个坑,key可以为null,但value不能为null,否则抛空指针异常nullPointerException。这可真是反直觉。 原因 解决方案 方案

问题

发现Collectors.toMap的一个坑,key可以为null,但value不能为null,否则抛空指针异常nullPointerException。这可真是反直觉。

原因

在这里插入图片描述

解决方案

方案一

使用Optional类处理value,优点是可以继续使用Collectors.toMap,缺点是为null的value会被改,而这可能违反业务上的期望。

方案二

使用 Stream#collect(java.util.function.Supplier, java.util.function.BiConsumer, java.util.function.BiConsumer)方法,可以保留为null的value。所以个人推荐方案二。

两个方案的代码如下:

public class TestCollect {  static class User {    String userName;    String idCard;    public String getUserName() {      return userName;    }    public String getIdCard() {      return idCard;    }    public User(String userName, String idCard) {      this.userName = userName;      this.idCard = idCard;    }  }  public static void main(String[] args) {    User user01 = new User("user01", "000000001");    User user02 = new User("user02", "000000002");    User user03 = new User("user03", "000000003");    User user04 = new User(null, "000000004");    User user05 = new User("user05", null);    User user06 = new User("user05", "a");    User user07 = new User("user05", "b");    ArrayList<User> list = new ArrayList();    list.add(user01);    list.add(user02);    list.add(user03);    list.add(user04);    list.add(user05);    list.add(user06);    list.add(user07);    //    HashMap map01 = list.stream().collect(//        Collectors.toMap(User::getUserName, User::getIdCard, (a, b) -> b, HashMap::new));//    System.out.println(map01);    //解决方案一,使用Optional类处理null    HashMap<String, String> map02 = list.stream().collect(Collectors        .toMap(User::getUserName, s -> Optional.ofNullable(s.getIdCard()).orElse("空的"), (a, b) -> b,            HashMap::new));    System.out.println(map02);    //解决方案二,直接使用collect()方法进行规约操作    HashMap<String, String> map03 = list.stream()        .collect(HashMap::new, (map, item) -> map.put(item.getUserName(), item.getIdCard()),            HashMap::putAll);    System.out.println(map03);  }}

主要参考: Stream使用Collector.tomap方法value值为null时报空指针异常 解决方案

来源地址:https://blog.csdn.net/qq_23204557/article/details/127558822

--结束END--

本文标题: Collectors.toMap方法value值为null时的解决方案

本文链接: https://lsjlt.com/news/421539.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作