Java 中无限流上的 allMatch 操作终止

问题描述 投票:0回答:1

我正在准备 OCP 考试。 一本书中有以下复习问题,其答案是

allMatch
终端操作:

var s = Stream.generate(() -> "meow");
var match = s.allMatch(String::isEmpty);
System.out.println(match);

它执行并打印

false

我的问题是,当流是无限的并且应该挂起时,Java 如何确定所有元素都与谓词完全匹配?

我的答案是

anyMatch
选项,它实际上挂起了......

java java-stream
1个回答
0
投票

allMatch
没有“确定所有元素都与谓词完全匹配”。如果有的话,它就会返回
true

它确定“有一个元素与谓词不匹配”,这更容易做到。之后,

allMatch
就可以返回 false。

对于

anyMatch
,它挂起是因为它无法确定是否存在任何空字符串,而且它永远不会这样做,因为这是一个无限的非空字符串流。

如果流中存在一个空字符串,

anyMatch
一旦找到该字符串就会返回
true

© www.soinside.com 2019 - 2024. All rights reserved.