Я счел необходимым прокомментировать, что решение @JordiCastilla неверно в том смысле, что оно завершено. Это может быть правильно, если тип элемента имеет правильные значения, потому что в случае Collections.indexOfSubList вы вызываете тип элемента списка равно.
/**
* Compares the specified object with this list for equality. Returns
* <tt>true</tt> if and only if the specified object is also a list, both
* lists have the same size, and all corresponding pairs of elements in
* the two lists are <i>equal</i>. (Two elements <tt>e1</tt> and
* <tt>e2</tt> are <i>equal</i> if <tt>(e1==null ? e2==null :
* e1.equals(e2))</tt>.) In other words, two lists are defined to be
* equal if they contain the same elements in the same order. This
* definition ensures that the equals method works properly across
* different implementations of the <tt>List</tt> interface.
*
* @param o the object to be compared for equality with this list
* @return <tt>true</tt> if the specified object is equal to this list
*/
boolean equals(Object o);
Это, однако, тривиально зависит от культуры, а в случае типа Строка неверно. Рассмотрим, например, случай:
String a = "ss";
String b = "ß"; //german "ss" character
Assert.IsTrue(a.equals(b)); //in java, this will return false even in DE locale
Я думаю, рассуждения за ней в том, что количество символов не соответствует - ни в коем случае не является правильным. Можно было бы подумать, что «по крайней мере, они получили основы вниз вправо» - и было бы неправильно:
«Вы должны знать, что интернационализация и локализация вопросы полных строк Unicode не рассматриваются с [String] методами Например, при сравнении двух строк для определения того, что является «больше», символы в строках сравниваются численно по значениям Unicode , а не по их локализованному понятию порядка."
В Unicode однако же строка может иметь несколько представлений, и они не будут приравнивать строковый тип является примером, но вы можете иметь любой тип данных
Короче говоря:.. Убедитесь, ваш тип элемента равняется имеет правильную реализацию
Другой пример того, как это может быть тривиальным неправильно выглядит следующим образом:.
List arrlistsrc = new ArrayList();
List arrlisttarget = new ArrayList();
arrlistsrc.add("A");
arrlistsrc.add("B");
arrlistsrc.add("C");
arrlisttarget.add("A");
arrlisttarget.add("C");
int index = Collections.indexOfSubList(arrlistsrc, arrlisttarget); // this will be -1
Первый список содержит второй, и они имеют один и тот же порядок, но между элементами целевых элементов источник содержит другие элементы.
Чтобы найти, что вы можете использовать что-то в строках:
boolean ContainsOrderedSublist<T>(IList<T> arrlistsrc, IList<T> arrlisttarget){
int slider = 0;
for (String val: arrlisttarget) {
slider = arrlistsrc.indexOf(val, slider);// or use culture independent version
if(slider < 0) break;
}
return slider < 0;
}
(NB: примеры кода не испытанные и написанные от головы)
отладить его ....... – Mohit
итерация. Прямого пути нет. – ergonaut
@ergonaut, пожалуйста, проверьте мой ответ ... java имеет некоторые встроенные функции, которые не известны –