2
假設我有一個實際的List [1,2,3,4],我想檢查它是否包含子列表[2,3](即順序也很重要)。有沒有一個現有的匹配器可以做到這一點?Hamcrest匹配器的子列表/部分匹配?
(有一個不良的命名hasItems
方法,該方法只檢查實際列表在預期列表中的任何一個項目匹配....)
假設我有一個實際的List [1,2,3,4],我想檢查它是否包含子列表[2,3](即順序也很重要)。有沒有一個現有的匹配器可以做到這一點?Hamcrest匹配器的子列表/部分匹配?
(有一個不良的命名hasItems
方法,該方法只檢查實際列表在預期列表中的任何一個項目匹配....)
如果可以,請自己寫。
它應該是這樣的:
public class HasSublist<T> extends TypeSafeMatcher<T> {
@Override
public boolean matchesSafely(List<T> subList) {
//Logic if sublist exist ...
return true;
}
public static <T> Matcher<T> hasSubList(List<T> containsSublist) {
return new HasSublist<T>(containsSublist);
}
}
我覺得不存在這樣的預定義的匹配器。我在JUnit上使用AssertJ,因此我可以像這樣處理這種情況:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.assertj.core.api.Assertions;
import org.junit.Test;
public class TestContains2 {
@Test
public void test_contains() {
List<Integer> a = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
Assertions
.assertThat(a)
.containsSequence(2, 3);
}
}
也許使用Collections.indexOfSubList? – dimitrisli
@dimitrisli感謝您的建議。我可能會在一個客戶匹配器中使用它。 –