在 Java 中,Predicate(断言) 是 Java 8 引入的一个函数式接口,位于 java.util.function 包中,常用于条件判断。
Predicate<T> 是一个接收一种类型参数、返回 boolean 结果的接口,用来表示一个“条件”或“断言”。
boolean test(T t);
import java.util.function.Predicate;
Predicate<Integer> isPositive = x -> x > 0;
System.out.println(isPositive.test(5)); // true
System.out.println(isPositive.test(-3)); // false
Predicate 提供了多个用于逻辑运算的方法:
and(与)Predicate<Integer> gt10 = x -> x > 10;
Predicate<Integer> lt20 = x -> x < 20;
Predicate<Integer> between = gt10.and(lt20);
System.out.println(between.test(15)); // true
or(或)Predicate<Integer> isEven = x -> x % 2 == 0;
Predicate<Integer> isNegative = x -> x < 0;
Predicate<Integer> cond = isEven.or(isNegative);
negate(非)Predicate<Integer> isZero = x -> x == 0;
Predicate<Integer> isNotZero = isZero.negate();
Predicate 最常见的使用场景是 集合过滤。
import java.util.*;
import java.util.stream.*;
List<String> list = Arrays.asList("Java", "Python", "C++", "Go");
List<String> result = list.stream()
.filter(s -> s.startsWith("J"))
.collect(Collectors.toList());
System.out.println(result); // [Java]
等价写法(使用 Predicate):
Predicate<String> startsWithJ = s -> s.startsWith("J");
list.stream().filter(startsWithJ);
public static List<Integer> filter(List<Integer> list, Predicate<Integer> p) {
List<Integer> result = new ArrayList<>();
for (Integer i : list) {
if (p.test(i)) {
result.add(i);
}
}
return result;
}
// 调用
filter(numbers, x -> x % 2 == 0);
✅ Predicate 的本质
一个“输入 T,返回 boolean”的条件判断函数
✅ 适用场景
如果你愿意,我也可以对比 Predicate 和 Function、Consumer 的区别,或者结合真实业务场景给你示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。