java中predicate接口通过and()、or()、negate()等默认方法支持链式组合条件:and()实现“且”逻辑(全真才真),or()实现“或”逻辑(一真即真),negate()实现取反,可混合构建复杂表达式,并支持短路执行与静态工厂方法提升复用性。

Java 中可以通过 Predicate 接口提供的默认方法(如 and()、or()、negate())链式组合多个条件,实现灵活的联合判断。
用 and() 实现“且”逻辑
多个条件必须同时满足才返回 true。每次调用 and() 都会返回一个新的 Predicate,支持链式调用:
Predicate<string> startsWithA = s -> s.startsWith("A");
Predicate<string> hasLength3 = s -> s.length() == 3;
Predicate<string> isUpperCase = s -> s.equals(s.toUpperCase());
Predicate<string> allMatch = startsWithA.and(hasLength3).and(isUpperCase);
System.out.println(allMatch.test("ABC")); // true
System.out.println(allMatch.test("Abc")); // false(不全大写)
</string></string></string></string>
用 or() 实现“或”逻辑
任一条件为 true 即返回 true。适合多选一的校验场景:
Predicate<integer> isEven = n -> n % 2 == 0; Predicate<integer> isNegative = n -> n isZero = n -> n == 0; Predicate<integer> anyTrue = isEven.or(isNegative).or(isZero); System.out.println(anyTrue.test(-5)); // true(负数) System.out.println(anyTrue.test(1)); // false(奇数、正数、非零) </integer></integer></integer>
用 negate() 实现“非”逻辑 + 混合组合
negate() 对当前条件取反,常与 and()/or() 搭配构建复杂表达式:
- 排除特定值:
notBlank.and(notEmpty).negate()等价于 “是空字符串或 null” - 常见组合:
isAdult.and(hasLicense.negate())表示“成年但无驾照” - 注意短路:
and()和or()内部按顺序执行,遇到第一个false(and)或true(or)即停止,类似 Java 的&&/||
用静态方法 Predicate.isEqual() 或自定义工厂简化构造
避免重复写 lambda,提升可读性和复用性:
- 判断是否等于某值:
Predicate<string> isEqualToFoo = Predicate.isEqual("foo");</string> - 封装常用逻辑:
static Predicate<string> contains(String sub) { return s -> s != null && s.contains(sub); }</string> - 配合 Stream 使用更自然:
list.stream().filter(p1.and(p2)).collect(...)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











