gpt4 book ai didi

Java Hamcrest Matcher 检查列表是否包含另一个列表

转载 作者:行者123 更新时间:2023-12-02 09:22:28 24 4
gpt4 key购买 nike

我想比较一个列表是否是另一个列表的子列表

假设我有以下列表

List<String> checkList = Arrays.asList("a", "d");

List<String> actualList = Arrays.asList("a", "b", "c", "d");

我想检查 actualList 是否包含 checkList 。我可以迭代每个值并进行比较。但是有没有 hamcrest matcher 可以完成这项工作

例如。

a,d 应该通过

abc 应该通过

但是ae应该失败

hasItems 支持单独传递字符串,contains 检查所有值,in 支持存在一个项目在一个列表中。但我想要

assertThat(actualList,containsList(checkList))

是否有可用的内置匹配器或者我需要编写自定义匹配器?

最佳答案

hasItems 接受 varargs 参数,因此您只需将列表转换为数组并传递它(或者,只需将其声明为数组即可):

final List<String> checkList = Arrays.asList("a", "d");
// final String[] checkListAsArray = new String[] { "a", "d" };
final String[] checkListAsArray = checkList.toArray(new String[checkList.size()]);
final List<String> actualList = Arrays.asList("a", "b", "c", "d");
assertThat(actualList, Matchers.hasItems(checkListAsArray));

检查列表的顺序并不重要。

如果交换 checkListactualList 的角色,您还可以编写:

assertThat(checkList, everyItem(isIn(actualList)));

这可能比以下内容更具可读性:

assertTrue(actualList.stream().allMatch(checkList::contains));

关于Java Hamcrest Matcher 检查列表是否包含另一个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58592066/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com