我想查找一串字符串是否在String
中至少出现了另一个Set<String>
。我想出了两种解决方案。
在性能方面,哪种方法最好/推荐?
1)
return source.stream().filter(this::streamFilter).count() > 0;
2)
return source.stream().anyMatch(this::streamFilter);
这是streamFilter方法:
private boolean streamFilter(String str) {
return filterKeywords.contains(str.toLowerCase());
}
filterKeywords:
private Set<String> filterKeywords;
还是有比这更好的方法?
最佳答案
您应该使用anyMatch(this::streamFilter)
,在下面的anyMatch
方法上查看API(强调我的),因为可能无法评估流的所有元素,因为count()
显然会迭代整个元素流。
重点是一些流方法,例如findFirst()
,anyMatch()
,findAny()
等。执行短路操作,即,它们可能不评估流的所有元素,您可以引用here以获得更多详细信息。