首页 > Java > java教程 > 为什么 Collectors.toMap 会针对 Null 值抛出 NullPointerException?

为什么 Collectors.toMap 会针对 Null 值抛出 NullPointerException?

Mary-Kate Olsen
发布: 2024-11-11 13:44:03
原创
253 人浏览过

Why Does Collectors.toMap Throw a NullPointerException for Null Values?

Collectors.toMap 中的 Null 值:解释和 Java 8 解决方案

Java 8 的 Collectors.toMap 方法在遇到 null 时抛出 NullPointerException尽管映射允许使用 null 值作为值,但 value 作为其第二个参数。这种奇怪的行为引起了开发人员的困惑。

行为背后的原因

此行为的根本原因是 Collectors.toMap 的 OpenJDK 实现中的一个已知错误。该方法尝试使用 HashMap.merge 操作合并给定键的当前值和新值。但是,此操作无法正常处理 null 值,从而导致异常。

Java 8 解决方案

要解决此问题,您可以使用以下方法:

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

此代码创建一个新的 HashMap,并使用自定义收集器通过直接调用 put 方法来填充它。这种方法允许添加空值。

其他注意事项

与 Collectors.toMap 不同,如果同一键出现多次,提供的解决方案将默默地替换值。如果不需要,您可能需要考虑评论部分中提供的替代解决方案。

通过了解 NullPointerException 背后的原因并使用解决方法,您可以在使用 Collectors.toMap 时有效处理 null 值。

以上是为什么 Collectors.toMap 会针对 Null 值抛出 NullPointerException?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板