Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java8中anyMatch和findAny的区别_Java_Arrays_Java 8_Java Stream - Fatal编程技术网

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(“不匹配”);
    
  • 返回此流中元素的计数。这是a的特殊情况,相当于:

    return mapToLong(e -> 1L).sum();
    
    boolean result3=Arrays.stream(字母表)
    .filter(“a”::相等信号案例)
    .count()>0;
    
  • 返回此流的任何元素是否与提供的匹配。如果不需要确定结果,则不能对所有元素的谓词求值。如果流为空,则返回false,并且不计算谓词

    boolean result4=Arrays.stream(字母表)
    .anyMatch(“a”::相等信号情况);
    
  • 返回此流的所有元素是否与提供的匹配。如果不需要确定结果,则不能对所有元素的谓词求值。如果流为空,则返回true,并且不计算谓词

    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
    。我只知道在我明白为什么之前我无法正常睡眠。。。