Null надежный компаратор даты для сортировки в Java 8 Stream
Я использую это, чтобы получить новый элемент. Как я могу заставить это быть нулевым и сортировать с нулевыми датами последней (самой старой). createDt является объектом joda LocalDate.
Optional<Item> latestItem = items.stream()
.sorted((e1, e2) -> e2.getCreateDt().compareTo(e1.getCreateDt()))
.findFirst();
Ответы
Ответ 1
Если это значение Item
, которое может быть нулевым, используйте решение @rgettman.
Если это LocalDate
, который может быть нулевым, используйте это:
items.stream()
.sorted(Comparator.comparing(Item::getCreateDt, Comparator.nullsLast(Comparator.reverseOrder())));
В любом случае обратите внимание, что sorted().findFirst()
, вероятно, будет неэффективным, так как большинство стандартных реализаций сначала сортируют весь поток. Вместо этого вы должны использовать Stream.min.
Ответ 2
Вы можете превратить свой собственный null-unsafe Comparator
в нуль-безопасный, обернув его Comparator.nullsLast
. (Существует также Comparator.nullsFirst
.)
Возвращает нуль-дружественный компаратор, который считает, что null
больше, чем не-null. Когда оба значения null
, они считаются равными. Если оба значения не равны нулю, для определения порядка используется указанный Comparator
.
.sorted(Comparator.nullsLast(
(e1, e2) -> e2.getCreateDt().compareTo(e1.getCreateDt())))
.findFirst();