Java中如何用Stream API的anyMatch获取匹配到的对应关键词
你使用的anyMatch()是仅返回布尔值的终结操作,只会告诉你是否存在匹配项,不会保留具体匹配到的元素,所以没法直接通过它拿到对应的关键词。要实现和原for循环完全一致的逻辑,可以按以下方式写:
提前统一转换目标字符串的大小写,避免流遍历过程中重复转换消耗性能,再通过filter筛选匹配项、findFirst取首个匹配结果,效果和你原有逻辑的for循环+break完全对齐:
// 提前转换text为小写,避免流内重复处理 String lowerText = text.toLowerCase(); keywords.stream() // 筛选出符合匹配规则的关键词 .filter(lowerText::contains) // 取第一个匹配的元素,找到后立即终止流遍历,等价于原逻辑的break .findFirst() // 仅当存在匹配项时执行打印逻辑,无匹配则不做任何操作 .ifPresent(matchKeyword -> { System.out.println("keyword >>> " + matchKeyword + " text >>> " + text); });
如果你的关键词列表本身也存在大小写不统一的情况,需要实现完全大小写不敏感的匹配,可以把filter的条件调整为:
.filter(keyword -> lowerText.contains(keyword.toLowerCase()))
内容的提问来源于stack exchange,提问作者omnomnom
相关产品推荐
相关产品推荐

