Если T
не реализует или не может реализовать Comparable
в соответствии с предложением этого ответа, вы можете указать Comparator<T>
и использовать его:
public static <T> boolean findNextPermutation(List<T> data, Comparator<T> comperator) {
if (data.size() <= 1) return false;
int last = data.size() - 2;
while (last >= 0) {
if (comperator.compare(data.get(last),data.get(last + 1)) < 0 ){
break;
}
last--;
}
if (last < 0) return false;
int nextGreater = data.size() - 1;
for (int i = data.size() - 1; i > last; i--) {
if (comperator.compare(data.get(i), data.get(last)) > 0) {
nextGreater = i;
break;
}
}
data = swap(data, nextGreater, last);
data = reverse(data, last + 1, data.size() - 1);
return true;
}
Примечание: Вы можете сделать ноль дружественного сотрудника. Например: Comparator<T> nullSafeComperator = Comparator.nullsFirst(comperator);