predicate是java 8引入的函数式接口,用于单参数布尔判断,核心方法test(t t)返回true/false;支持lambda表达式、泛型、and/or/negate链式组合、isequal等静态工厂方法,并广泛应用于stream.filter等场景。

Predicate 是 Java 8 引入的函数式接口,专用于单参数条件判断,返回 true 或 false。它不执行业务逻辑,只做“是/否”判定,是 Stream.filter、集合筛选、校验逻辑等场景的核心工具。
用 test() 方法执行基础判断
所有 Predicate 的核心都落在 test(T t) 方法上——传入一个值,返回布尔结果。
- 直接写 Lambda:比如
Predicate<string> isLong = s -> s.length() > 5;</string>,调用isLong.test("Hello!")返回 true - 封装成工具方法:可把
test()封装进通用校验方法中,避免重复写 if 判断 - 支持泛型:
Predicate<integer></integer>、Predicate<user></user>等均可,类型安全,编译期就能检查
用 and/or/negate 组合多个条件
不用手动写 && 或 ||,Predicate 提供了语义清晰的默认方法来组合逻辑:
-
and:两个条件都满足才为 true ——
isEven.and(isPositive) -
or:任一条件满足即为 true ——
isNull.or(isEmpty) -
negate:取反 ——
isAdult.negate()相当于 “不是成年人” - 组合可链式调用:
p1.and(p2).negate().or(p3),逻辑清晰且可读性强
用 isEqual 等静态方法快速构建常用断言
Java 已内置一些实用的静态工厂方法,省去手写 Lambda:
-
Predicate.isEqual("abc"):判断是否等于指定对象(自动处理 null) -
Objects::nonNull:常用于判空,比s -> s != null更简洁 - 配合正则:
s -> s.matches("\d{3}-\d{2}-\d{4}")可封装为身份证格式校验 Predicate
在 Stream 中配合 filter 做数据筛选
Predicate 最典型的落地场景就是流式过滤:
list.stream().filter(x -> x > 0).collect(Collectors.toList())- 把条件提取为变量更易复用:
Predicate<integer> positive = x -> x > 0;</integer>,后续多处调用.filter(positive) - 多个条件组合后传入:
.filter(isEven.and(isGreaterThan10)),一行代码表达复合语义
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











