在 Java 中,Predicate(断言) 是 Java 8 引入的一个函数式接口,位于 java.util.function 包中,常用于对某个对象进行条件判断,返回一个 boolean 结果。
Predicate<T> 是一个接收一个参数、返回布尔值的函数式接口。
@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
}
T:输入参数类型test(T t):判断逻辑,返回 true 或 falsePredicate<Integer> isGreaterThanTen = x -> x > 10;
System.out.println(isGreaterThanTen.test(15)); // true
System.out.println(isGreaterThanTen.test(5)); // false
Predicate<String> startsWithA = s -> s.startsWith("A");
startsWithA.test("Apple"); // true
startsWithA.test("Banana"); // false
and(与)同时满足多个条件:
Predicate<Integer> gt10 = x -> x > 10;
Predicate<Integer> lt20 = x -> x < 20;
Predicate<Integer> between = gt10.and(lt20);
between.test(15); // true
between.test(25); // false
or(或)满足其中一个条件即可:
Predicate<Integer> isEven = x -> x % 2 == 0;
Predicate<Integer> gt10 = x -> x > 10;
Predicate<Integer> evenOrGt10 = isEven.or(gt10);
evenOrGt10.test(8); // true
evenOrGt10.test(11); // true
negate(非)取反:
Predicate<Integer> gt10 = x -> x > 10;
Predicate<Integer> notGt10 = gt10.negate();
notGt10.test(5); // true
notGt10.test(15); // false
Predicate 最常见于 Stream 过滤数据。
List<String> names = List.of("Alice", "Bob", "Anna", "Tom");
List<String> result = names.stream()
.filter(name -> name.startsWith("A"))
.collect(Collectors.toList());
// [Alice, Anna]
| 对比点 | if 判断 | Predicate |
|---|---|---|
| 是否可传递 | 否 | 是(可作为参数) |
| 是否函数式 | 否 | 是 |
| 是否适合流式编程 | 否 | ✅ 非常适合 |
Java 中的 Predicate 就是一个“条件判断器”,用来判断某个对象是否满足某种规则,返回 true 或 false,特别适合函数式编程和 Stream 操作。
如果你愿意,我也可以给你讲 Predicate vs Function vs Consumer 的区别,或者结合 Spring / 校验框架的实际用法。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。