使用 predicate 的 and()、or() 和 negate() 方法可以组合多个过滤条件。通过链式调用这些方法,可以将多个简单的判断逻辑合并为一个复合谓词,从而在流处理或集合过滤中实现复杂的业务规则。

如何组合两个独立的过滤条件
将两个独立的 Predicate 实例通过 and() 方法连接,可以实现“且”的逻辑。例如,先定义一个检查年龄是否大于 18 的条件,再定义一个检查状态是否为活跃的条件,两者结合即可筛选出成年且活跃的用户。

import java.util.function.Predicate;
public class PredicateExample {
public static void main(String[] args) {
Predicate<string> isLong = s -> s.length() > 5;
Predicate<string> startsWithA = s -> s.startsWith("A");
Predicate<string> combined = isLong.and(startsWithA);
System.out.println(combined.test("Apple")); // true
System.out.println(combined.test("Banana")); // false
System.out.println(combined.test("App")); // false
}
}</string></string></string>
如何处理取反与多条件混合
使用 negate() 可以对单个条件进行取反,而 or() 则用于实现“或”的逻辑。在实际应用中,经常需要排除某些特定情况,或者满足多个条件中的任意一个。通过将这些操作符混合使用,可以构建出更灵活的过滤表达式。

import java.util.function.Predicate;
public class PredicateMixedExample {
public static void main(String[] args) {
Predicate<integer> isEven = n -> n % 2 == 0;
Predicate<integer> isPositive = n -> n > 0;
// 偶数 或 负数
Predicate<integer> complexCondition = isEven.or(isPositive.negate());
System.out.println(complexCondition.test(4)); // true (even)
System.out.println(complexCondition.test(-3)); // true (negative)
System.out.println(complexCondition.test(3)); // false (odd and positive)
}
}</integer></integer></integer>
当输入为null时组合后的结果是什么
如果参与组合的 Predicate 内部没有对 null 值进行防御性检查,那么在组合后执行 test() 方法传入 null 时,会抛出 NullPointerException。这是因为 and() 和 or() 只是将多个谓词串联起来,并不会自动添加空指针保护。因此,在使用组合谓词前,必须确保每个子谓词都能安全地处理 null 输入,或者在外部显式处理 null 情况。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











