Ich verwende das, um den neuesten Artikel zu erhalten. Wie kann ich erreichen, dass dies nullsicher ist und das letzte Datum (älteste) ist. createDt ist ein joda LocalDate-Objekt.
Optional<Item> latestItem = items.stream()
.sorted((e1, e2) -> e2.getCreateDt().compareTo(e1.getCreateDt()))
.findFirst();
Wenn die Variable Item
s Null sein kann, verwenden Sie die Lösung von @ rgettman.
Wenn die Variable LocalDate
s Null sein kann, verwenden Sie Folgendes:
items.stream()
.sorted(Comparator.comparing(Item::getCreateDt, Comparator.nullsLast(Comparator.reverseOrder())));
Beachten Sie in beiden Fällen, dass sorted().findFirst()
wahrscheinlich ineffizient ist, da die meisten Standardimplementierungen den gesamten Stream zuerst sortieren. Verwenden Sie stattdessen Stream.min .
Sie können aus Ihrer eigenen null-unsicheren Comparator
eine null-sichere machen, indem Sie Comparator.nullsLast
einschließen. (Es gibt auch einen Comparator.nullsFirst
.)
Gibt einen nullfreundlichen Vergleicher zurück, der
null
für größer als nicht null hält. Wenn beidenull
sind, werden sie als gleich betrachtet. Wenn beide nicht null sind, wird die Reihenfolge anhand der angegebenen VariableComparator
bestimmt.
.sorted(Comparator.nullsLast(
(e1, e2) -> e2.getCreateDt().compareTo(e1.getCreateDt())))
.findFirst();
schreiben Sie Ihre eigene:
stream().sorted((o1, o2) ->
(o1.getF1() == null || o2.getF1() == null) ? 1 :
o1.getF1().compareTo(o2.getF1())
)
Dies ist die erste Sortierung von Nullen. Ändern Sie den Rückgabewert der if-Anweisung von 1 in -1 für die letzten Nullen