在这个例子中 anyMatch 如何在 java 流中工作

Mar*_*oli -5 java java-stream

这是我的代码:

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");
                });
Run Code Online (Sandbox Code Playgroud)

输出是:

map: d2
anyMatch: D2
map: a2
anyMatch: A2
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么第一个元素进入流而第三个和第四个没有?

任何详细的解释表示赞赏。

All*_*all 7

javadoc的文本:

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

这是一个短路操作,在遇到该元素时会导致 true。

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