在本例中,anyMatch如何在java流中工作

在本例中,anyMatch如何在java流中工作,java,java-stream,Java,Java Stream,这是我的代码: Stream.of("d2", "a2", "b1", "b3", "c") .map(s -> { System.out.println("map: " + s); return s.toUpperCase();

这是我的代码:

Stream.of("d2", "a2", "b1", "b3", "c")
                .map(s -> {
                    System.out.println("map: " + s);
                    return s.toUpperCase();
                })
                .anyMatch(s -> {
                    System.out.println("anyMatch: " + s);
                    return ((String) s).startsWith("A");
                });
输出为:

map: d2
anyMatch: D2
map: a2
anyMatch: A2
我的问题是为什么第一个元素进入流而第三个、第四个元素没有

感谢您的详细解释。

摘自:

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

这是一种短路操作,当遇到该元素时,结果为真


如果要处理每个项目,请使用forEach。

您的代码相当于:

for(字符串s:新字符串[]{“d2”、“a2”、“b1”、“b3”、“c”}){
System.out.println(“映射:+s”);
s=s.toUpperCase();
System.out.println(“anyMatch:+s”);
if(((字符串)s).startsWith(“A”))
打破
}
由于
break
语句的原因,
“a2”
之后的元素未被处理。这被称为短路,即在到达末端之前断开回路(电路)(在末端短路时停止)

该方法记录为短路:

这是一个很好的例子

该链接导致了以下解释:

此外,一些操作被视为短路操作。中间操作是短路,当输入无限大时,可能会产生有限的流。如果终端操作在无限输入时可能在有限时间内终止,则终端操作为短路。在管道中进行短路操作是无限流处理在有限时间内正常终止的必要条件,但不是充分条件


您是否阅读了
anyMatch
的文档?这些都有记录。