stream().anyMatch() 是 Java Stream API 中的短路布尔匹配方法,传入 Predicate 判断是否至少一个元素满足条件;遇首个 true 立即返回 true,全不满足或流为空则返回 false。

stream().anyMatch() 是 Java Stream API 中用于判断流中是否至少有一个元素满足指定条件的方法,返回 boolean 值。它在找到第一个匹配项后立即停止遍历(短路操作),效率较高。
基本用法:传入 Predicate 函数式接口
需要传入一个 Predicate 类型的 lambda 表达式或方法引用,对每个元素做布尔判断:
- 只要有一个元素使该条件返回
true,整体就返回true - 若所有元素都不满足,或流为空,返回
false
示例:检查列表中是否有负数
List<integer> numbers = Arrays.asList(1, 2, -3, 4); boolean hasNegative = numbers.stream().anyMatch(x -> x </integer>
常用匹配场景
字符串判空或包含关键字
list.stream().anyMatch(s -> s != null && !s.trim().isEmpty())list.stream().anyMatch(s -> s != null && s.contains("error"))
对象属性判断
users.stream().anyMatch(u -> u.getAge() >= 18)orders.stream().anyMatch(o -> "pending".equalsIgnoreCase(o.getStatus()))
注意空值和异常安全
如果流中可能含 null 元素,Predicate 内需主动判空,否则会抛 NullPointerException:
- 错误写法:
list.stream().anyMatch(s -> s.startsWith("a"))(s 为 null 时崩溃) - 正确写法:
list.stream().anyMatch(s -> s != null && s.startsWith("a")) - 或用
Objects.nonNull()辅助:list.stream().anyMatch(Objects::nonNull)
与其它匹配方法对比
-
allMatch():全部满足才返回true -
noneMatch():全部都不满足才返回true(等价于!anyMatch(),但语义更清晰) -
findAny()或findFirst():返回匹配的元素本身,而非布尔值
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











