#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. что, если я хочу сделать с точностью до наоборот? Если даты равны нулю или совпадают, тогда отсортируйте по имени.