Java 子列表/部分匹配的Hamcrest匹配器?

Java 子列表/部分匹配的Hamcrest匹配器?,java,hamcrest,Java,Hamcrest,假设我有一个实际的列表[1,2,3,4],我想检查它是否包含子列表[2,3](即顺序也很重要)。有没有现有的匹配器可以这样做 (有一个名字不好的hasItems方法,它只检查实际列表是否与预期列表中的任何一项匹配……)我认为没有这样的预定义匹配器。我在JUnit上使用AssertJ,因此我可以这样处理这个案例: import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.assert

假设我有一个实际的列表[1,2,3,4],我想检查它是否包含子列表[2,3](即顺序也很重要)。有没有现有的匹配器可以这样做


(有一个名字不好的
hasItems
方法,它只检查实际列表是否与预期列表中的任何一项匹配……)

我认为没有这样的预定义匹配器。我在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);
  }
}
import java.util.ArrayList;
导入java.util.array;
导入java.util.List;
导入org.assertj.core.api.Assertions;
导入org.junit.Test;
公共类TestContains2{
@试验
公共无效测试_包含(){
列表a=新的ArrayList(Arrays.asList(1,2,3,4,5));
断言
.断言(a)
.包含顺序(2,3);
}
}

如果可以,写你自己的

应该是这样的:

 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);
      }
}
public类HasSublist扩展了TypeSafeMatcher{
@凌驾
公共布尔匹配(列表子列表){
//逻辑如果子列表存在。。。
返回true;
}
公共静态匹配器hasSubList(列表包含SSUBLIST){
返回新的HasSublist(containsSublist);
}
}

也许可以使用Collections.IndexofPublist?@dimitrisli感谢您的建议。我可能会在custome matcher中使用它。这是无效的。有
matchessesafely
方法采用单个
T
,而不是
列表