Java8中anyMatch和findAny的区别
我有一个Java8中anyMatch和findAny的区别,java,arrays,java-8,java-stream,Java,Arrays,Java 8,Java Stream,我有一个数组,想对它的元素执行一些匹配 我知道在Java8中可以通过两种方式实现: String[]alphabet=新字符串[]{“A”、“B”、“C”}; anyMatch: Arrays.stream(字母表).anyMatch(“A”::equalsIgnoreCase); findAny: Arrays.stream(字母表).filter(“a”::equalsIgnoreCase) .findAny().orElse(“未找到匹配项”); 据我所知,他们都在做同样的工作。但是
数组
,想对它的元素执行一些匹配
我知道在Java8
中可以通过两种方式实现:
String[]alphabet=新字符串[]{“A”、“B”、“C”};
anyMatch:
Arrays.stream(字母表).anyMatch(“A”::equalsIgnoreCase);
findAny:
Arrays.stream(字母表).filter(“a”::equalsIgnoreCase)
.findAny().orElse(“未找到匹配项”);
据我所知,他们都在做同样的工作。但是,我找不到更喜欢哪一个
有人能说清楚两者的区别吗。它们在内部做相同的工作,但它们的返回值不同。返回一个
布尔值
,同时返回一个与谓词匹配的对象。在Java8
String[]alphabet=新字符串[]{“A”、“B”、“C”};
不同之处在于返回值的类型:
stringresult1=Arrays.stream(字母表)
.filter(“a”::相等信号案例)
.findAny()
.orElse(“不匹配”);
stringresult2=Arrays.stream(字母表)
.filter(“a”::相等信号案例)
.findFirst()
.orElse(“不匹配”);
return mapToLong(e -> 1L).sum();
boolean result3=Arrays.stream(字母表)
.filter(“a”::相等信号案例)
.count()>0;
boolean result4=Arrays.stream(字母表)
.anyMatch(“a”::相等信号情况);
boolean result5=Arrays.stream(字母表)
.allMatch(“a”::相等信号情况);
他们几乎做同样的工作
anyMatch
是一个短路操作,但是filter
将始终处理整个流。@jornverne findAny code:if(!stop&&predicate.test(t)=matchKind.stopOnPredicateMatches){stop=true;..
是短路。@jornverne这是本周第三次了!:(是的,它是jdk-9;这是我的默认设置。sorry@MehrajMalik好吧,它应该在不久之后就出来了。@Jornverne你可能有一些“物质”这里。一个是通过FindOps
实现的,另一个是通过MatchOps
实现的。这样做很容易,match
就会调用find
,然后返回isPresent
,返回结果Optional
。我只知道在我明白为什么之前我无法正常睡眠。。。