You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻找org.assertj.core.api中已弃用方法containsOnlyElementsOf的替代方案

替代AssertJ已弃用containsOnlyElementsOf的范围验证方案

如果你需要验证Integer列表的所有元素都处于指定数值范围,完全不需要依赖已弃用的containsOnlyElementsOf,AssertJ提供了更直接高效的断言方式:

方法1:使用allSatisfy逐个验证元素

这是最直观的方式,直接对列表中的每个元素做范围断言:

import static org.assertj.core.api.Assertions.assertThat;

List<Integer> targetList = List.of(2, 4, 6, 8);
int lowerBound = 1;
int upperBound = 9;

// 验证所有元素都在[lowerBound, upperBound]范围内
assertThat(targetList).allSatisfy(num -> {
    assertThat(num).isGreaterThanOrEqualTo(lowerBound);
    assertThat(num).isLessThanOrEqualTo(upperBound);
});

也可以简化为链式断言:

assertThat(targetList).allSatisfy(num -> 
    assertThat(num).isBetween(lowerBound, upperBound)
);

方法2:过滤不符合条件的元素并断言为空

通过过滤出不在范围内的元素,断言过滤结果为空,间接验证所有元素符合要求:

assertThat(targetList)
    .filteredOn(num -> num < lowerBound || num > upperBound)
    .isEmpty();

为什么不用containsOnlyElementsOf?

之前用containsOnlyElementsOf配合范围集合的方式(比如先生成范围对应的Integer集合)存在明显缺陷:当范围跨度很大时,生成的集合会占用大量内存,且断言逻辑不够直观。上面的两种方法无需额外生成集合,直接针对元素做验证,性能和可读性都更优。

内容的提问来源于stack exchange,提问作者IDK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 01:45:36