У меня есть пользовательская таблица, использующая Comparator для сортировки элементов по столбцам.Я хочу "закрепить" некоторые элементы сверху независимо от текущей сортировки (asc / desc).Помимо «обычных» предметов ( C ), которые сравниваются как обычно, у меня также есть один особый предмет ( A ), который всегда должен быть в верхней частитаблица и N «любимых» предметов ( B ), которые должны быть после A и до C иих порядок не важен (но я также попытался «отсортировать» их по числовому значению).
Вот представление о том, как должна выглядеть моя таблица, независимо от того, какая сортировка используется в текущий момент (только C элементы должны быть отсортированы):
A (always present on top)
B (isFavorite)
B (isFavorite)
C (these items are sorted normally)
C
...
C
Вот мой компаратор, который не работает должным образом.Иногда A после B или я даже получаю Comparator violates general contract
исключение.
private class CustomOrderAwareComparator implements Comparator<MyObject> {
@Override
public int compare(MyObject o1, MyObject o2) {
// isA() is always true only for one item
if(o1.isA() && o2.isA())
return 0;
else if(o1.isA())
return table.getSortedOrder() == DESCENDING ? 1 : -1;
// isB() can be true for multiple items
if(o1.isB() && o2.isB()))
return 0;
else if(o1.isB())
return table.getSortedOrder() == DESCENDING ? 1 : -1;
return o1.getValue().compareTo(o2.getValue());
}
}
Буду признателен за любую информацию о том, что мне здесь не хватает.Спасибо!