Java中不使用OR运算符判断字符串包含多个指定值的优化实现
优化方案
核心优化点
- 抽离重复逻辑:原代码两个分支仅
state取值不同,插入、对象构建逻辑完全一致,先确定state值再统一执行后续操作,消除冗余代码 - 匹配关键词抽为常量集合:避免硬编码的冗长判断条件,后续增删忽略关键词只要修改集合即可,维护成本更低
- 用Stream流的
anyMatch方法简化匹配逻辑,可读性更高
优化后代码
// 忽略关键词抽为类静态常量,Java 9+ 用Set.of,Java 8可替换为Arrays.asList private static final Set<String> IGNORE_KEYWORDS = Set.of("word", "different word", "phrase", "different phrase"); // 业务逻辑部分 // 提前取出title,避免重复调用getTitle,也可提前加空值处理防止空指针 String title = record.getTitle(); State targetState = IGNORE_KEYWORDS.stream().anyMatch(title::contains) ? State.IGNORE : State.NEW; int id = dao.insert(nv); nvRecord = NV.builder() .from(nv) .setId(id) .setState(targetState) .build();
可选扩展
- 若需要忽略大小写匹配,将匹配逻辑改为
keyword -> title.toLowerCase().contains(keyword.toLowerCase()) - 若title可能为null,提前加空值处理:
String title = Optional.ofNullable(record.getTitle()).orElse(""); - 若关键词量级很大(超100个),可引入AC自动机优化匹配效率,普通业务场景上述写法性能完全够用
内容的提问来源于stack exchange,提问作者jayteezer
相关产品推荐
相关产品推荐

