Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
0
respuestas

Posible causa del NullPointerException al ordenar episodios (caso Episodio y fechaLanzamiento)

Estoy siguiendo el curso paso a paso y me encontré con este error al convertir DatosEpisodio a mi clase Episodio y luego intentar ordenar la lista de episodios:

java.lang.NullPointerException: Cannot invoke "java.lang.Comparable.compareTo(Object)" 
because the return value of "java.util.function.Function.apply(Object)" is null

Al principio pensé que el problema venía de la evaluación "N/A" o de algún Double.valueOf(), pero al revisar más a fondo descubrí algo importante:
El error no venía de evaluacion(), sino de fechaDeLanzamiento.
En el constructor de Episodio, cuando el API devuelve una fecha inválida, se ejecuta el catch:

try {
    this.fechaLanzamiento = LocalDate.parse(d.fechaDeLanzamiento());
} catch (DateTimeParseException e) {
    this.fechaLanzamiento = null;
}

Esto significa que algunos episodios quedan con null ycuando más adelante hacemos:

episodios.stream()
....
    .sorted(Comparator.comparing(Episodio::getFechaLanzamiento))
    .toList();

Java intenta ejecutar internamente fechaLanzamiento.compareTo(otraFecha) y si una de las fechas es null, el Comparator lanza el NullPointerException.

A la solucion que llegue despues de 3 horas de analisis de mi error y la logica de mi codigo con chatgpt fue permitir fechas nulas indicandole al Comparator qué hacer con ellas.

.sorted(
    Comparator.comparing(
        Episodio::getFechaLanzamiento,
        Comparator.nullsFirst(Comparator.naturalOrder())
    )
)