可以的,Java 里的 Predicate 本身就是一个“断言/条件判断”接口,常用于过滤操作,尤其是在 集合(Stream)过滤 和 条件判断 场景中。
Predicate 是什么?java.util.function.Predicate<T> 是一个函数式接口,只有一个核心方法:
boolean test(T t);
作用:给定一个对象,返回 true / false(是否满足某种条件)
Predicate 做过滤(最常用)这是 Predicate 最典型的“过滤”用法:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6);
Predicate<Integer> isEven = n -> n % 2 == 0;
List<Integer> evenList = list.stream()
.filter(isEven) // Predicate 过滤
.collect(Collectors.toList());
System.out.println(evenList); // [2, 4, 6]
✅ Stream 的 filter() 本质就是接收一个 Predicate
Predicate 自带逻辑方法:
| 方法 | 含义 |
|---|---|
and() |
与 |
or() |
或 |
negate() |
非 |
Predicate<Integer> greaterThan3 = n -> n > 3;
Predicate<Integer> lessThan6 = n -> n < 6;
list.stream()
.filter(greaterThan3.and(lessThan6))
.forEach(System.out::println); // 4 5
你可以自己写过滤逻辑:
List<String> names = Arrays.asList("Tom", "Jack", "Alice");
Predicate<String> startsWithT = s -> s.startsWith("T");
for (String name : names) {
if (startsWithT.test(name)) {
System.out.println(name);
}
}
✅ 集合过滤
✅ 参数校验
✅ 规则引擎
✅ 权限判断
✅ 通用工具方法
例如:
public static <T> List<T> filter(List<T> list, Predicate<T> p) {
List<T> result = new ArrayList<>();
for (T t : list) {
if (p.test(t)) {
result.add(t);
}
}
return result;
}
Predicate 就是“条件”,
filter()才是“过滤动作”,但 Predicate 是过滤的核心依据。
如果你愿意,我也可以给你讲:
Predicate vs FilterPredicate 在 Spring / 框架里的使用你想看哪一块?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。