温馨提示×

温馨提示×

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

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

如何用java Predicate做断言

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

在 Java 中,Predicate<T> 是 java.util.function 包下的函数式接口,常用于条件判断 / 断言。它本身不是测试框架里的“断言”,而是返回一个 boolean 的判断逻辑。

下面从 基本用法 → 组合断言 → 实际场景 逐步说明。


一、Predicate 基本用法

import java.util.function.Predicate;

Predicate<Integer> isPositive = x -> x > 0;

System.out.println(isPositive.test(5));  // true
System.out.println(isPositive.test(-1)); // false

核心方法:

  • test(T t):执行断言,返回 boolean

二、多个 Predicate 组合(断言叠加)

1️⃣ AND(并且)

Predicate<Integer> isPositive = x -> x > 0;
Predicate<Integer> isEven = x -> x % 2 == 0;

Predicate<Integer> isPositiveAndEven = isPositive.and(isEven);

System.out.println(isPositiveAndEven.test(4)); // true
System.out.println(isPositiveAndEven.test(3)); // false

2️⃣ OR(或者)

Predicate<String> isEmpty = String::isEmpty;
Predicate<String> isNull = s -> s == null;

Predicate<String> isEmptyOrNull = isEmpty.or(isNull);

3️⃣ negate(取反)

Predicate<Integer> isAdult = age -> age >= 18;
Predicate<Integer> isNotAdult = isAdult.negate();

三、在集合中使用(最常用)

过滤数据(类似断言)

List<Integer> list = List.of(1, 2, 3, 4, 5, 6);

Predicate<Integer> greaterThan3 = x -> x > 3;

list.stream()
    .filter(greaterThan3)
    .forEach(System.out::println);

输出:

4
5
6

四、作为“断言方法”使用(封装校验)

public static void check(int value, Predicate<Integer> rule) {
    if (!rule.test(value)) {
        throw new IllegalArgumentException("校验失败");
    }
}

// 使用
check(10, x -> x > 0);
check(-1, x -> x > 0); // 抛异常

五、和 Optional 配合

Optional<String> opt = Optional.of("hello");

opt.filter(s -> s.length() > 3)
   .ifPresent(System.out::println);

六、如果是“测试断言”(JUnit 风格)

如果你说的“断言”是指 测试失败就报错,可以这样:

Predicate<Boolean> assertTrue = b -> b;

if (!assertTrue.test(1 == 2)) {
    throw new AssertionError("断言失败");
}

或者直接用 JUnit:

assertTrue(predicate.test(value));

七、小结

用法 说明
test() 执行断言
and() 多条件同时满足
or() 满足其一
negate() 取反
Stream / Optional 常用过滤场景

如果你有具体场景(如:参数校验、规则引擎、单元测试),我可以给你更贴合的示例。

向AI问一下细节

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

AI
助
手