我想查找字符串流是否至少在Set<String>
中出现过一次另一个String
。我想出了两个解决方案。
性能方面,哪种方法是最佳/推荐的?
1(
return source.stream().filter(this::streamFilter).count() > 0;
2(
return source.stream().anyMatch(this::streamFilter);
下面是流筛选方法:
private boolean streamFilter(String str) {
return filterKeywords.contains(str.toLowerCase());
}
过滤器关键字: private Set<String> filterKeywords;
还是有比这更好的方法?
你应该使用 anyMatch(this::streamFilter)
,查看下面 anyMatch
方法上的 API(强调我的(,因为它可能无法评估流的所有元素,而count()
显然迭代了整个元素流。
返回此流的任何元素是否与提供的元素匹配 谓语。如果不是,则可能无法计算所有元素的谓词 确定结果所必需的。如果流为空,则 返回 false,并且不计算谓词。
关键是一些流方法,如findFirst()
、anyMatch()
、findAny()
等,执行短路操作,即它们可能无法评估流的所有元素,您可以参考此处以获取更多详细信息。
anyMatch 并不总是执行所有流。这是最好的方法。