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())
)
)