java8 Stream流Collectors.toMap当value为null时报空指针异常(NPE)

这篇具有很好参考价值的文章主要介绍了java8 Stream流Collectors.toMap当value为null时报空指针异常(NPE)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、问题

在项目测试过程中发现当使用下面这种方法后报空指针异常(NPE):

map.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (a, b) -> b));

按理说 HashMap 的 key 和 value 都是可以为 null 的,不应该报 NPE 啊,经过定位分析发现 Map 中有个键值对的 value 为 null 值,在调用 Collectors.toMap 时报了 NullPointerException 。

二、分析

Collectors.toMap 的 toMap 方法的第二个参数就是 Map 的 value 值,而 toMap 里是调用了 merge 方法,该方法第二个参数(Map 的 value)是要求不能为 null 的,否则会报空指针。

collectors.tomap npe,Java相关问题解决办法,java,开发语言,java8,Collectors,toMap

 

collectors.tomap npe,Java相关问题解决办法,java,开发语言,java8,Collectors,toMap

 三、解决方法

根据要返回的类型使用下面对应的方式:

Map<String, Object> resultMap = new HashMap<>();
result.entrySet().forEach(queryMap -> resultMap.put(queryMap.getKey(), queryMap.getValue()));
Map<String, String> resultMap = 
    map.entrySet().stream().collect(Collectors.toMap(entry -> entry.getKey(),
			entry -> Optional.ofNullable(entry.getValue()).orElse("")));

四、方法使用注意事项

在使用 Collectors.toMap 时需要注意下面两点:
1、key 不能有重复,否则会报错,因为 Map 的 key 不能重复
2、value 不能为空,否则报空指针异常(NPE)
文章来源地址https://www.toymoban.com/news/detail-554005.html

到了这里,关于java8 Stream流Collectors.toMap当value为null时报空指针异常(NPE)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java stream流toMap使用过程中空指针问题

    Java8中stream操作list时常见的一个错误: 排查原因: 定位到代码中发现从数据查询是存在数据的 排查stream前对象为null的情况,那问题只能出现在toMap这里了 我们需要知道toMap是怎么帮我们封装数据的,先搞明白toMap的原理,点击源码可以看到他并不是通过map中的put方法封装数

    2024年02月05日
    浏览(29)
  • Java解决stream流Collectors.groupingBy 分组统计可能报空指针异常

    在使用stream流的Collectors.groupingBy做分组统计时(示例代码如下) 如果统计的字段userName有null值则会报如下错误 解决方法为在统计之前增加一个filter方法将null值事先过滤掉。代码如下:

    2024年02月04日
    浏览(34)
  • 详细解决java中的Collectors.toMap引起的java.lang.IllegalStateException: Duplicate key xxx 的错误

    今天,测试在禅道上给我指出一个正式环境 bug ,如下图所示: 即 java.lang.IllegalStateException: Duplicate key 2 。 根据 java.lang.IllegalStateException: Duplicate key 2 可知,这是 java 抛出的存在 2个重复键 的错误。 如果想要弄清楚错误原因,通过如下几个步骤分析: 首先,看到这个错误信息

    2024年01月19日
    浏览(46)
  • Java8 Collectors类详解(一)

      Collectors 类是用于对流进行收集和汇总的工具类。它提供了许多方法来对流进行分组、统计、转换、分区、连接、归约等操作,使得处理集合类数据变得更加方便。         在使用 Collectors 类时,我们可以通过调用其中的方法来实现对流的不同处理方式。例如,将流中

    2024年02月07日
    浏览(40)
  • Collectors.groupingBy()进行分组时,分组值存在null值会报NPE(空指针)错误,使用时要注意

    1、使用Collectors.groupingBy()进行分组时,分组值存在null值。 解决办法:分组值为null时,默认值为空字符。

    2024年02月14日
    浏览(33)
  • Collectors.toMap使用详解

    在实际项目中我们经常会有 List 转 Map 操作,在过去(JAVA8以前)我们可能使用的是 for 循环遍历的方式,这种方式就不做过多赘述。这里主要讲解使用 Collectors.toMap 方式及使用过程需注意的地方,避免踩坑 三个重载的方法如下: 参数含义分别是: keyMapper:Key 的映射函数。 va

    2024年02月11日
    浏览(35)
  • Collectors.toMap()的基本使用方法

    介绍: 1、Java 8 流的新类 java.util.stream.Collectors 实现了 java.util.stream.Collector 接口,同时又提供了大量的方法对流 ( stream ) 的元素执行 map and reduce 操作,或者统计操作; 2、Collectors.toMap()是Java8引入的流特性,可以把集合转换为Map集合,转换对象中的key不可重复,重复会报错;

    2024年02月10日
    浏览(49)
  • java8新特性之toMap的用法——全网独一无二的通俗易懂的讲解

    对于java8的新特性toMap方法,相信有很多人都在工作中用过,接下来就通俗易懂的讲解一下toMap吧 先来看看官网对于toMap方法的解释 toMap有个三个重载的方法,每一个重载方法的详解分别如下 (1)方法1:两个参数 public static T, K, U Collector T, ?, MapK,U toMap(Function? super T, ? extends

    2024年02月08日
    浏览(49)
  • java 8 stream toMap key的重复问题

    工作中遇到需要将某个List里面的实体类的两个属性对应起来,比如根据姓名找到年龄,就是将List里面的entity属性解析之后放到Map里。 实体类: 逻辑: 单纯常规写法肯定没什么问题,就是后面的key会被覆盖,但是stream流不行,会报错。 Collectors.toMap这个方法其实是有三个参数

    2024年01月22日
    浏览(30)
  • Java Stream 处理分组后取每组最大&Stream流之list转map、分组取每组第一条&Java 8 Collectors:reducing 示例(List分组取最值)

    有一个需求功能:先按照某一字段分组,再按照另外字段获取最大的那个 先根据appId分组,然后根据versionSort取最大. JDK1.8推出的stream流能极大的简化对集合的操作,让代码更美观,老规矩,直接上代码。 取list中对象的某个属性作为唯一key,对象作为value形成一个map集合,能

    2024年02月16日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包