Java Streams: filter().count() vs anyMatch()

2022-09-03 13:00:47

我想找出字符串流是否至少有一个字符串在.我想出了两个解决方案。StringSet<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;

还是有比这更好的方法?


答案 1

你应该使用,看看下面的方法上的API(强调我的),因为它可能不会评估流的所有元素,因为显然迭代了整个元素流。anyMatch(this::streamFilter)anyMatchcount()

返回此流的任何元素是否与提供的谓词匹配。如果确定结果不是必需的,则可能不会评估所有元素的谓词。如果流为空,则返回 false,并且不计算谓词。

关键是一些流方法,如 、 、 等。执行短路操作,即它们可能不会评估流的所有元素,您可以参考此处以获取更多详细信息。findFirst()anyMatch()findAny()


答案 2

anyMatch 并不总是执行所有流。这是最好的方法。


推荐