我有一个 Array
,想对它的元素执行一些匹配操作。
我了解到在 java 8
中可以通过两种方式实现:
String[] alphabet = new String[]{"A", "B", "C"};
anyMatch:
该方法用于判断流中是否存在满足给定条件的元素,如果至少有一个元素满足条件,则返回true,否则返回false。Arrays.stream(alphabet).anyMatch("A"::equalsIgnoreCase);
findAny:
Arrays.stream(alphabet).filter("a"::equalsIgnoreCase)
.findAny().orElse("No match found"));
我理解两者都在做同样的工作。然而,我找不到哪一个更好?
请问有人可以澄清一下它们之间的区别吗。
anyMatch
是一个短路操作,但是filter
将始终处理整个流。 - Jorn Verneeif (!stop && predicate.test(t) == matchKind.stopOnPredicateMatches) { stop = true; ...
其中采用了短路计算。 - EugeneFindOps
实现的,另一个是通过MatchOps
实现的。本来可以很容易地这样做,即match
调用find
,并在结果的Optional
上返回isPresent
。我只是知道在理解原因之前,我将无法正常入睡... - Eugene