ArrayList按organizationName搜索无结果,请求技术排查解决
问题分析与修复
核心错误点
你的searchAddress方法存在两个关键问题:
- 空指针风险+判断顺序错误:先调用
d.getOrganizationName().toLowerCase()再判断是否为null,若organizationName本身是null,这一步会直接抛出NullPointerException,导致方法中断。 - 大小写匹配逻辑错误:仅将搜索关键词转小写,但未将目标字符串
organizationName转小写后再做包含判断,导致"Anth"无法匹配"anth"(contains方法会区分大小写)。
修复后的代码
@Override public List<Address> searchAddress(String search) { List<Address> listClone = new ArrayList<>(); // 提前处理搜索关键词的null情况,避免后续调用toLowerCase()抛空指针 String lowerSearch = search != null ? search.toLowerCase() : ""; for(Address d : list){ // 先判断organizationName是否为null,再转小写执行匹配逻辑 if(d.getOrganizationName() != null && d.getOrganizationName().toLowerCase().contains(lowerSearch)) { listClone.add(d); } } return listClone; }
可选优化(Java 8+)
用Stream API简化代码,可读性更强:
@Override public List<Address> searchAddress(String search) { String lowerSearch = search != null ? search.toLowerCase() : ""; return list.stream() .filter(d -> d.getOrganizationName() != null) .filter(d -> d.getOrganizationName().toLowerCase().contains(lowerSearch)) .collect(Collectors.toList()); }
关键注意事项
- 始终先判断字符串是否为null,再调用字符串方法,这是Java避免空指针异常的基础规范。
- 提前处理搜索关键词的null场景,避免传入null时触发异常。
内容的提问来源于stack exchange,提问作者Kartik khandelwal
相关产品推荐
相关产品推荐

