我想查找一串字符串是否在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以获得更多详细信息。

09-30 00:08