温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java Predicate断言能过滤吗

发布时间:2026-09-19 10:30:24 来源:亿速云 阅读:94 作者:小樊 栏目:编程语言

可以的,Java 里的 Predicate 本身就是一个“断言/条件判断”接口,常用于过滤操作,尤其是在 集合(Stream)过滤 和 条件判断 场景中。


一、Predicate 是什么?

java.util.function.Predicate<T> 是一个函数式接口,只有一个核心方法:

boolean test(T t);

作用:给定一个对象,返回 true / false(是否满足某种条件)


二、用 Predicate 做过滤(最常用)

✅ 1. 结合 Stream 过滤集合

这是 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


✅ 2. 多个条件组合过滤

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

三、不用 Stream,也能用 Predicate 过滤

你可以自己写过滤逻辑:

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);
    }
}

四、Predicate 常用于哪些地方?

✅ 集合过滤
✅ 参数校验
✅ 规则引擎
✅ 权限判断
✅ 通用工具方法

例如:

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 Filter
  • Predicate 在 Spring / 框架里的使用
  • 复杂业务中如何封装 Predicate

你想看哪一块?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手