Нулевой безопасный компаратор с двумя сравнениями в java

#java #null #comparator

#java #null #компаратор

Вопрос:

У меня есть список с номерами. Эти комнаты могут использоваться пользователем на определенную дату или планироваться к использованию в будущем без указания конкретной даты. Сначала все шло действительно хорошо, но поскольку мы допускаем нулевые значения для дат, я больше не могу использовать этот метод сортировки. Самое главное, что сначала он должен быть отсортирован по персоналиям, а затем должны быть указаны даты. Значения null должны быть внизу списка каждого пользователя. Я немного попробовал с nullFirst(), но не смог написать безошибочный код: D В большинстве примеров онлайн есть только одно сравнение вместо двух. (Person никогда не будет null)

 roomTOs.sort(Comparator
            .comparing(
                    personTO::getPersonName)
            .thenComparing(
                    personTO::getUsedDate));
  

Комментарии:

1. Другими словами, вы хотите сначала отсортировать по имени. Если имена совпадают, упорядочивайте по дате, а даты, имеющие значение null, рассматриваются как «последние».

2. Точно @Sweeper

Ответ №1:

Если я правильно понял, вы хотите что-то вроде этого:

 roomTOs.sort(Comparator
            .comparing(
                    personTO::getPersonName)
            .thenComparing(
                    personTO::getUsedDate, Comparator.nullsLast(Comparator.naturalOrder()))
            );
  

Комментарии:

1. Теперь я чувствую себя глупо. Это выглядит так просто, и я просто не подумал о том, чтобы просто поместить его в «thenComparing»-Метод. Я перепробовал так много сложных вещей, потому что мое понимание компаратора настолько плохо. Большое спасибо!

2. что, если я хочу сделать с точностью до наоборот? Если даты равны нулю или совпадают, тогда отсортируйте по имени.