Обновление : Фактически, единственным приемлемым решением для этой проблемы будет сортировка массива по возрастанию, а затем его обратное.
Пусть S будет следующей последовательностью событий:
Event | Time
A | 0:00
B | 0:01
C | 0:01
D | 0:02
У меня есть простой компаратор для сортировки S , который сортирует элементы в соответствии со значением time .
public int compare(Event e1, Event e2) {
// Reverse sorting.
// _sortOrder is set outside this method.
if(SORT_DESCENDING.equals(_sortOrder))
return e2.getTime() - e1.getTime(); /* time is long */
return e1.getTime() - e2.getTime();
}
Проблема в том, что при сортировке по возрастанию S сортируется правильно: A, B, C, D.
Но когда я использую обратную сортировку, S становится D, B, C, A:
Event | Time
D | 0:02
B | 0:01 /* B and C should be reversed */
C | 0:01
A | 0:00
Это происходит потому, что алгоритм сортировки по умолчанию сохраняет исходный порядок для элементов с одинаковым значением time .
Итак, как мне отсортировать все наоборот, не сохраняя первоначальный порядок?
Примечание: Я знаю, что могу отсортировать S по возрастанию и далее просто вернуть его, но, к сожалению, в моем случае это не вариант.