Java中无法移除列表内companyId为空元素的问题求助
解决方法
问题根源
触发空指针是因为getCompanyId()返回null时,调用equals(null)会直接抛出NullPointerException——null对象不能调用任何方法。而你之前的流处理只过滤了null的Bean实例,没处理companyId为空的Bean,所以无效。
方法1:直接定位末尾元素移除(最高效)
既然确定目标元素在列表末尾,不用遍历整个列表,直接取最后一个元素判断后移除:
if (!newSRMAPIResponseBeanList.isEmpty()) { NewSRMAPIResponseBean lastBean = newSRMAPIResponseBeanList.get(newSRMAPIResponseBeanList.size() - 1); // 判断companyId是否为空 if (lastBean.getCompanyId() == null || lastBean.getCompanyId().isEmpty()) { newSRMAPIResponseBeanList.remove(newSRMAPIResponseBeanList.size() - 1); } }
方法2:修复普通for循环
修改判断逻辑,先检查companyId是否为null,同时用倒序遍历避免索引错乱:
for (int i = newSRMAPIResponseBeanList.size() - 1; i >= 0; i--) { NewSRMAPIResponseBean bean = newSRMAPIResponseBeanList.get(i); if (bean != null && bean.getCompanyId() == null) { newSRMAPIResponseBeanList.remove(i); // 因为只需要移除末尾的,找到后直接终止循环 break; } }
方法3:正确使用流处理
在流中添加过滤companyId不为null的条件,生成新列表;或者用removeIf原地修改:
// 生成新列表 List<NewSRMAPIResponseBean> finalList = newSRMAPIResponseBeanList.stream() .filter(Objects::nonNull) // 过滤null的Bean实例 .filter(bean -> bean.getCompanyId() != null) // 过滤companyId为空的Bean .collect(Collectors.toList()); // 原地修改原列表 newSRMAPIResponseBeanList.removeIf(bean -> bean == null || bean.getCompanyId() == null);
内容的提问来源于stack exchange,提问作者Pratik
相关产品推荐
相关产品推荐

