Spring Boot中如何处理NullPointerException?过滤在线客户列表时空指针如何解决
空指针异常解决方案
问题根因
异常提示已经明确说明:调用String.equals(Object)方法时,getTypeofcustomer()的返回值为null,空对象没有equals方法,因此触发空指针异常。
修复方案
你可以选择以下任意一种空安全的写法修复filter逻辑:
- 方案1:将字符串常量放在equals前面,利用常量非空的特性避免空指针
把filter内的判断改为:.filter(i -> "ONLINE_CUSTOMER".equals(i.getTypeofcustomer())) - 方案2:使用JDK提供的
Objects.equals空安全比较工具
先导入java.util.Objects,再修改判断逻辑:.filter(i -> Objects.equals(i.getTypeofcustomer(), "ONLINE_CUSTOMER")) - 方案3:增加前置非空校验,先过滤掉字段为null的记录
.filter(i -> i.getTypeofcustomer() != null && i.getTypeofcustomer().equals("ONLINE_CUSTOMER")) - 方案4(治本方案):如果业务规则要求客户类型字段不允许为空,可以在数据源层面增加非空约束,比如数据库字段设为NOT NULL、实体类字段增加非空校验注解,从根源避免空值产生。
额外代码优化建议
你现有代码中if (getproducts.size() > 0)的判断可以直接删除,Stream API对空列表的处理会直接返回空集合,不需要单独分支处理,简化后代码如下:
public List<Productnames> getproductpurchasedlist() { List<Productnames> getproducts = stockProductService.getproducts(); return getproducts.stream() .filter(i -> Objects.equals(i.getTypeofcustomer(), "ONLINE_CUSTOMER")) .collect(Collectors.toList()); }
内容的提问来源于stack exchange,提问作者welcome_java
相关产品推荐
相关产品推荐

