Como llegar máximo de la lista de fechas con la corriente, al tener valores nulos en la lista

Bartek:

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 maxtoma Comparatorque 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.

Peter Lawrey:

Si usted espera que la respuesta sea nullporque 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 nullcon LocalDate.MAXel 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 nulluna lista vacía.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=185638&siteId=1
Recomendado
Clasificación