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

Stream filter如何通过Lambda仅在result.getExtendedAddress()存在时新增条件

Java Stream Lambda 过滤条件简化方案

最简实现(基于Apache Commons Lang StringUtils null安全特性)

Apache Commons Lang包下的StringUtils.containsIgnoreCase本身是null安全的:如果待匹配的字符串为null,会直接返回false,完全不需要手动加result.getExtendedAddress() != null的空判断,和你原有逻辑完全等价,代码量直接缩减一半:

.filter(result -> StringUtils.isNotBlank(title) &&
    (StringUtils.containsIgnoreCase(result.getTitle(), title) || 
     StringUtils.containsIgnoreCase(result.getExtendedAddress(), title)))

同时这个写法还规避了手动调用toLowerCase()可能带来的区域语言大小写转换异常问题,比如土耳其语字符i的大小写转换不符合预期的边界情况。

可维护性优化方案(适合后续扩展过滤规则)

如果后续还有新增其他字段匹配的需求,可以把匹配逻辑单独抽成私有方法,Lambda处直接调用即可,可读性更高:

// 按实际业务调整方法作用域和入参
private boolean matchSearchRule(Result result, String searchTitle) {
    if (StringUtils.isBlank(searchTitle)) {
        return false;
    }
    // 优先匹配标题
    if (StringUtils.containsIgnoreCase(result.getTitle(), searchTitle)) {
        return true;
    }
    // 扩展地址存在时匹配地址,也可以在此处新增其他字段的匹配逻辑
    return StringUtils.containsIgnoreCase(result.getExtendedAddress(), searchTitle);
}

Filter处直接调用即可:

.filter(result -> matchSearchRule(result, title))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:06:08