You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 8 Stream处理空值问题:薪资字段空值引发NPE

解决Person类salary字段null导致的NPE问题

这问题我熟!你遇到的NPE根源在于mapToDouble(Person::getSalary)的自动拆箱操作——当salary是null时,把Integer类型拆箱成基本类型double的步骤会直接抛出NullPointerException,而且原代码的写法本身就没法保留null值,因为mapToDouble会强制把所有值转成基本类型double,而基本类型是不支持存储null的。

方案1:保留Integer类型的列表(最直接)

如果你的需求是保留原有的Integer类型(包含null),直接用map替代mapToDouble即可,完全避免拆箱操作:

persons.stream()
       .map(Person::getSalary)
       .collect(Collectors.toList());

这个写法会直接将每个Person的salary(包括null)收集到List<Integer>中,没有任何拆箱操作,自然不会触发NPE。

方案2:获取Double类型的列表(保留null)

如果确实需要得到List<Double>同时保留null值,可以手动处理null情况,避免对null进行拆箱:

persons.stream()
       .map(person -> person.getSalary() != null ? person.getSalary().doubleValue() : null)
       .collect(Collectors.toList());

这里只有当salary不为null时才调用doubleValue()转成Double类型,null则直接保留,最终得到的List<Double>会包含所有原有的null值,同时不会抛出NPE。

内容的提问来源于stack exchange,提问作者Himanshu Yadav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:09:25