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

Java 8 Stream过滤收集至列表时抛出NullPointerException问题排查

分析你的Stream API抛出NullPointerException的原因

让我直接帮你定位问题:你代码里有个明显的手误,而且这个手误触发了包装类型布尔值的null问题!

问题根源

看这段代码:

MarkupModel m1 = new MarkupModel(); 
m1.setOverrideFlag(true); 
MarkupModel m2 = new MarkupModel(); 
m1.setOverrideFlag(false); // 这里你又给m1设了一次值,完全没管m2!

你给m1重复设置了overrideFlag,但**m2的overrideFlag属性完全没初始化**。如果MarkupModel类里的overrideFlag是Boolean包装类型(不是boolean基本类型),那它的默认值是null。

当Stream执行filter操作时:

.filter(markupModel -> !markupModel.getOverrideFlag())

处理到m2的时候,markupModel.getOverrideFlag()返回null,而Java不允许对null的Boolean对象执行!逻辑非操作,直接就抛出NullPointerException了。

修复方案

你可以从这几个方向解决:

  • 修正手误:把第二次给m1赋值的代码改成给m2设置,比如:
    m2.setOverrideFlag(false); // 或者true,根据你的业务需求
    
  • 增加null判断:在filter里先确保属性不为null,再做逻辑判断:
    .filter(markupModel -> markupModel.getOverrideFlag() != null && !markupModel.getOverrideFlag())
    
  • 改用基本类型:如果业务允许,把MarkupModel中的overrideFlag字段改成boolean基本类型,它的默认值是false,就不会出现null的情况了。

内容的提问来源于stack exchange,提问作者Durlabh Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 23:52:49