J'utilise ceci pour obtenir le dernier article. Comment puis-je obtenir que ce soit null safe et trier avec les dates null last createDt est un objet joda LocalDate.
Optional<Item> latestItem = items.stream()
.sorted((e1, e2) -> e2.getCreateDt().compareTo(e1.getCreateDt()))
.findFirst();
Si c'est le Item
s qui peut être nul, utilisez la solution de @ rgettman.
Si c'est le LocalDate
s qui peut être null, utilisez ceci:
items.stream()
.sorted(Comparator.comparing(Item::getCreateDt, Comparator.nullsLast(Comparator.reverseOrder())));
Dans les deux cas, notez que sorted().findFirst()
sera probablement inefficace, car la plupart des implémentations standard trient tout d'abord le flux complet. Vous devriez utiliser Stream.min à la place.
Vous pouvez transformer votre propre variable Comparator
null-unsafe en une machine null-safe en l'enveloppant Comparator.nullsLast
. (Il existe également un Comparator.nullsFirst
.)
Renvoie un comparateur null-friendly qui considère que
null
est supérieur à non-null. Lorsque les deux sontnull
, ils sont considérés comme égaux. Si les deux sont non nuls, laComparator
spécifiée est utilisée pour déterminer l'ordre.
.sorted(Comparator.nullsLast(
(e1, e2) -> e2.getCreateDt().compareTo(e1.getCreateDt())))
.findFirst();
écrivez votre coutume:
stream().sorted((o1, o2) ->
(o1.getF1() == null || o2.getF1() == null) ? 1 :
o1.getF1().compareTo(o2.getF1())
)
Ceci est le premier tri des nulls, change la valeur de retour de l'instruction if