You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中无限流的allMatch操作为何能终止?OCP备考疑问

为什么Java无限流使用allMatch不会挂起,而anyMatch会?

先看你给出的代码:

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

这段代码输出false但不会挂起,核心原因是allMatch的短路求值特性:

  • allMatch的逻辑是验证流中所有元素是否都满足断言。它会逐个检查元素,只要找到第一个不满足断言的元素,就会立刻终止流的遍历,直接返回false。
  • 你的代码里,流生成的第一个元素是"meow",调用isEmpty()返回false,刚好不满足断言,所以allMatch直接停止遍历,返回结果,自然不会挂起。

再看你提到的anyMatch为什么会挂起:

  • anyMatch的逻辑是验证流中是否存在至少一个满足断言的元素。它会逐个检查元素,直到找到第一个满足断言的元素才会终止并返回true;如果遍历到死都找不到,就会一直运行下去。
  • 你的流里所有元素都是"meow",永远不会满足String::isEmpty的断言,所以anyMatch会一直遍历无限流,导致程序挂起。

简单总结:

  • allMatch:遇第一个不匹配则终止,返回false
  • anyMatch:遇第一个匹配则终止,返回true;若永远找不到匹配项,无限流就会一直运行

内容的提问来源于stack exchange,提问作者Joe D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 05:42:02