stream().allMatch()用于判断流中所有元素是否都满足指定条件,返回boolean值:全满足或空流时为true,任一不满足则false;需传入Predicate,注意null安全。

stream().allMatch() 是 Java Stream API 中用于判断流中**所有元素是否都满足指定条件**的方法。它返回一个 boolean 值:只要有一个元素不满足条件,就立即返回 false;只有全部通过才返回 true;空流(没有元素)也返回 true(逻辑上“所有零个元素都满足”成立)。
基本用法:传入 Predicate 条件
你需要提供一个 Predicate(即接收一个元素、返回 boolean 的函数式接口),比如 Lambda 表达式或方法引用:
-
// 检查列表中所有字符串长度是否都大于 2
List<string> words = Arrays.asList("cat", "dog", "bird");<br> boolean allLongEnough = words.stream().allMatch(s -> s.length() > 2); // true</string> -
// 检查是否所有数字都是正数
List<integer> nums = Arrays.asList(1, 5, 10, -3);<br> boolean allPositive = nums.stream().allMatch(n -> n > 0); // false(-3 不满足)</integer>
注意空集合和 null 安全
allMatch() 对空集合(如 new ArrayList())返回 true,这是“空真”(vacuous truth)的数学惯例。但你要小心 null 元素引发的异常:
- 如果流中含
null,而你的 Predicate 在调用时未做判空(如s.length()),会抛NullPointerException。 - 安全写法示例:
list.stream().allMatch(s -> s != null && s.length() > 3)
与 anyMatch() 和 noneMatch() 的区别
三者都是短路匹配操作,但语义不同:
-
allMatch(p):全部满足 →true;任一不满足 →false -
anyMatch(p):至少一个满足 →true;全都不满足 →false -
noneMatch(p):全部不满足 →true;任一满足 →false
实际场景建议
适合用于校验类逻辑,例如:
- 验证表单字段是否全部非空:
fields.stream().allMatch(f -> f != null && !f.trim().isEmpty()) - 检查订单项价格是否都 ≥ 0:
items.stream().allMatch(item -> item.getPrice() >= 0) - 确认用户权限集合是否全包含在白名单中:
userRoles.stream().allMatch(whitelist::contains)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











