stream.allmatch()用于检查流中所有元素是否都满足predicate条件,空流返回true,遇到第一个不满足条件的元素立即返回false,具有短路特性。

Stream.allMatch() 用于检查流中**所有元素是否都满足给定的 Predicate 条件**,只要有一个不满足就立即返回 false;如果全部满足或流为空,则返回 true。
核心行为:短路判断
它采用“短路”逻辑 —— 一旦遇到第一个不满足条件的元素,立刻停止遍历,不再处理后续元素。这对性能和避免副作用(比如调用有副作用的方法)很重要。
- 空流(如
Stream.empty())默认返回true(数学上“全称命题在空集上成立”) - 遇到第一个
false,直接返回false,不继续执行 - 所有元素都返回
true,才最终返回true
基本用法示例
判断一个整数列表是否全为正数:
List<integer> numbers = Arrays.asList(1, 2, 3, 4); boolean allPositive = numbers.stream().allMatch(n -> n > 0); // true numbers = Arrays.asList(1, -2, 3); allPositive = numbers.stream().allMatch(n -> n > 0); // false(遇到 -2 就停) </integer>
注意 null 和异常情况
Predicate 内部如果对 null 元素做操作(如调用 .length()),可能抛出 NullPointerException。需提前处理:
- 用
Objects.nonNull()先判空再操作 - 或确保流中不含 null,或在 map/filter 阶段清理
例如判断字符串列表是否全非空且长度大于 0:
List<string> strs = Arrays.asList("a", "bb", "");
boolean allValid = strs.stream()
.allMatch(s -> s != null && !s.isEmpty()); // false(因为 "" 不满足)
</string>
和 anyMatch / noneMatch 的区别
三者都是终端操作,但语义不同:
-
allMatch(p):全部满足 → true;任一不满足 → false -
anyMatch(p):至少一个满足 → true;全都不满足 → false -
noneMatch(p):全都不满足 → true;至少一个满足 → false
它们都支持短路,但触发退出的条件不同。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











