Возможно, что запись изменится с <7 дней до> 7 дней в середине сортировки, поэтому то, что вы делаете, нарушает правила для компаратора. Конечно, это не означает, что это не сработает: многие вещи, которые задокументированы как «непредсказуемые», на самом деле работают, если вы точно знаете, что происходит внутри.
Я думаю, что ответ из учебника таков: это не надежно для встроенных сортировок. Вы должны написать свою собственную функцию сортировки.
По крайней мере, я бы сказал, что вы не можете полагаться на TreeSet или любую "отсортированную структуру", волшебным образом прибегающую к самому себе, когда даты пересекают границу. В лучшем случае это может сработать, если вы выполните повторную сортировку непосредственно перед отображением и не будете полагаться на что-то правильное между обновлениями.
В худшем случае непоследовательные сравнения могут привести к серьезным нарушениям. У вас нет уверенности, что это не приведет вас к бесконечной петле или к какой-либо другой смертельной черной дыре.
Поэтому я бы сказал: прочитайте исходный код Sun для любых классов или функций, которые вы планируете использовать, и посмотрите, сможете ли вы выяснить, что произойдет. Тестирование это хорошо, но есть потенциально сложные случаи, которые сложно протестировать. Наиболее очевидным является то, что: если в процессе сортировки запись переходит границы даты? То есть он может один раз взглянуть на запись и сказать, что она <7, но в следующий раз, когда увидит ее,> 7. Это может быть плохо, плохие новости.
Одна очевидная хитрость, которая приходит мне в голову: преобразовывать дату в возраст, когда вы добавляете запись в структуру, а не динамически. Таким образом, это не может измениться в сортировке. Если конструкция будет жить дольше нескольких минут, пересчитайте возрасты в какое-то подходящее время и затем пересортируйте. Я сомневаюсь, что кто-то скажет, что ваша программа неверна, потому что вы сказали, что записи менее 7 дней, а на самом деле ей 7 дней, 0 часов, 0 минут и 2 секунды. Даже если кто-то заметил, насколько точны их часы?