我想比较一个列表是否是另一个列表的子列表
假设我有以下列表
List<String> checkList = Arrays.asList("a", "d");
List<String> actualList = Arrays.asList("a", "b", "c", "d");
我想检查actualList
是否包含checkList
。我可以迭代每个值并进行比较。但是有没有汉克雷斯特的匹配者能胜任的工作
例如
a
、d
应通过
a
、b
、c
应通过
但是a
、e
应该不能通过
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));
checkList的顺序并不重要。
如果你交换checkList
和actualList
的角色,你也可以写:
assertThat(checkList, everyItem(isIn(actualList)));
这可能比更可读
assertTrue(actualList.stream().allMatch(checkList::contains));