allMatch 是 Java Stream 的终端操作,用于判断流中所有元素是否都满足谓词条件;空流返回 true,遇第一个不匹配元素即短路返回 false,适用于各类流且线程安全。

allMatch 是 Java Stream API 中的终端操作,用于判断流中**所有元素是否都满足给定的谓词(Predicate)条件**。只要有一个元素不满足,就立即返回 false;若全部满足或流为空,返回 true。
基本用法:传入 Predicate 函数式接口
语法很简单:
boolean result = stream.allMatch(predicate);
其中 predicate 是一个 BooleanSupplier 风格的函数式接口,接收一个元素并返回 boolean。
- 空流(如
Stream.empty())调用allMatch总是返回true(逻辑上“所有零个元素都满足”成立) - 遇到第一个不匹配的元素时短路退出,不会遍历后续元素
- 适用于任何引用类型或基本类型流(
IntStream等也有对应方法)
常见使用示例
假设有一个整数列表:
立即学习“Java免费学习笔记(深入)”;
List<Integer> numbers = Arrays.asList(2, 4, 6, 8);
- 检查是否全为偶数:
numbers.stream().allMatch(n -> n % 2 == 0)→true - 检查是否全大于 10:
numbers.stream().allMatch(n -> n > 10)→false - 检查字符串列表是否全非空:
list.stream().allMatch(s -> s != null && !s.trim().isEmpty())
与 anyMatch / noneMatch 的区别
三者都是布尔型终端操作,但语义不同:
-
allMatch:全部满足才为true -
anyMatch:至少一个满足即为true -
noneMatch:全部都不满足才为true(等价于!anyMatch(...))
注意事项
使用时注意以下几点:
- 谓词中避免有副作用(如修改外部变量、IO 操作),因为短路行为可能导致部分元素未被处理
- 对并发流(
parallelStream())使用allMatch是安全的,但结果语义不变 - 如果需要同时获取匹配结果和具体元素,
allMatch不适用——它只返回布尔值,不提供中间数据


















