簡體   English   中英

Java Hamcrest Matcher 檢查列表是否包含另一個列表

[英]Java Hamcrest Matcher check if list contains another list

我想比較一個列表是否是另一個列表的子列表

假設我有以下列表

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

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

我想檢查actualList是否包含checkList 我可以迭代每個值並進行比較。 但是是否有任何 hamcrest matcher 可以完成這項工作

例如。

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 的順序並不重要。

如果你交換checkListactualList的角色,你也可以這樣寫:

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

這可能比以下更具可讀性:

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

您還可以使用List::containsAll方法:

assertTrue(actualList.containsAll(checkList));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM