Null veilige datumvergelijker voor sorteren in Java 8 Stream

Ik gebruik dit om het nieuwste item te krijgen. Hoe kan ik ervoor zorgen dat dit null-veilig is en sorteert met nuldatums als laatste (oudste). createDt is een joda LocalDate-object.

Optional<Item> latestItem = items.stream()
                             .sorted((e1, e2) -> e2.getCreateDt().compareTo(e1.getCreateDt()))
                             .findFirst();

Antwoord 1, autoriteit 100%

Als het de Item‘s zijn die mogelijk null zijn, gebruik dan de oplossing van @rgettman.

Als het de LocalDates zijn die mogelijk null zijn, gebruik dan dit:

items.stream()
     .sorted(Comparator.comparing(Item::getCreateDt, Comparator.nullsLast(Comparator.reverseOrder())));

Houd er in beide gevallen rekening mee dat sorted().findFirst()waarschijnlijk inefficiënt is, aangezien de meeste standaardimplementaties de hele stream eerst sorteren. Gebruik Stream.minin plaats daarvan.


Antwoord 2, autoriteit 23%

Je kunt van je eigen null-onveilige Comparatoreen null-safe maken door deze Comparator.nullsLast. (Er is ook een Comparator.nullsFirst.)

Retourneert een null-vriendelijke comparator die nullals groter beschouwt dan niet-null. Als beide nullzijn, worden ze als gelijk beschouwd. Als beide niet-null zijn, wordt de opgegeven Comparatorgebruikt om de volgorde te bepalen.

.sorted(Comparator.nullsLast(
     (e1, e2) -> e2.getCreateDt().compareTo(e1.getCreateDt())))
.findFirst();

Other episodes