He siguiente código:
List<LocalDate> dates = Arrays.asList(null, null,
LocalDate.now(), LocalDate.now().minusDays(9));
LocalDate max = dates.stream()
.max(Comparator.nullsLast(Comparator.naturalOrder())).get();
Que producen excepción de puntero nulo cuando trato de conseguir el máximo, pero al intentar conseguir min funciona bien. Parece causa poco clara max
toma Comparator
que se ocupa de valores nulos. Cómo ordenar dicha matriz con valores nulos corriente preservación.
Por cierto, he comprobado JavaDoc de max
, que establece:
@throws NullPointerException si el elemento de máxima es nulo
EDITAR:
LocalDate max = dates.stream()
.max(Comparator.nullsLast(Comparator.naturalOrder())).orElse(null);
Lanza puntero nulo también.
Si usted espera que la respuesta sea null
porque contiene uno puede hacer su propia reducción.
List<LocalDate> dates = Arrays.asList(null, null,
LocalDate.now(), LocalDate.now().minusDays(9));
LocalDate max = dates.stream()
.reduce(LocalDate.MIN,
BinaryOperator.maxBy(Comparator.nullsLast(Comparator.naturalOrder())));
System.out.println(max);
huellas dactilares
null
NOTA: Esto es diferente en el sentido de que una lista vacía vuelve LocalDate.MIN.
Una opción menos obvia es reemplazar null
con LocalDate.MAX
el supuesto de que esto nunca se utiliza.
LocalDate max = dates.stream()
.map(d -> d == null ? LocalDate.MAX : d)
.max(Comparator.naturalOrder())
.map(d -> LocalDate.MAX.equals(d) ? null : d)
.orElse(null);
Esto devuelve null
una lista vacía.