wake-up-neo.net

Null-Safe-Date-Vergleicher zum Sortieren in Java 8 Stream

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();
21
Andrew

Wenn die Variable Items Null sein kann, verwenden Sie die Lösung von @ rgettman. 

Wenn die Variable LocalDates 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 .

42
Paul Boddington

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 beide null sind, werden sie als gleich betrachtet. Wenn beide nicht null sind, wird die Reihenfolge anhand der angegebenen Variable Comparator bestimmt.

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

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

0
Mohsen Kashi