Agregué a la clase Principal la funcionalidad que busca libros de autores que se hallaban o se hallan vivos durante un determinado período de tiempo. Para filtrar esos datos, recurro directamente a la API Gutendex, agregando los parámetros correspondientes:
// Búsqueda de libros por un rango de tiempo en el que se encuentran sus autores vivos:
System.out.println("\nBuscar libros por un rango de tiempo en el que se encuentran sus autores vivos:");
System.out.println("Ingrese la fecha inicial:");
var fechaInicial = teclado.nextLine();
System.out.println("Ingrese la fecha final:");
var fechaFinal = teclado.nextLine();
json = consumoAPI.obtenerDatos(URL_BASE
+ "?author_year_start="+fechaInicial+"&author_year_end="+fechaFinal);
datosBusqueda = conversor.obtenerDatos(json, Datos.class);
// Filtrar y mostrar los libros con autores válidos y en el rango de fechas ingresadas por el usuario:
List<DatosLibros> librosFiltrados = datosBusqueda.resultados().stream()
// Asegurarse de que tiene autores:
.filter(l -> !l.autor().isEmpty())
//Validar que tenga fecha de nacimiento:
.filter(l -> l.autor().get(0).fechaDeNacimiento() != null)
// Ordenar por fecha de nacimiento del autor:
.sorted(Comparator.comparing(libro -> libro.autor().get(0).fechaDeNacimiento()))
.collect(Collectors.toList());
// Mostrar los libros filtrados:
librosFiltrados.forEach(libro -> {
System.out.println("\nTítulo: " + libro.titulo());
// Iterar sobre todos los autores de cada libro, porque puede haber más de un autor:
libro.autor().forEach(autor -> {
System.out.println("Autor: " + autor.nombre());
System.out.println("Fecha de nacimiento: " + autor.fechaDeNacimiento());
// Verificar si la fecha de muerte está disponible:
if (autor.fechaDeMuerte() != null) {
System.out.println("Fecha de muerte: " + autor.fechaDeMuerte());
} else {
System.out.println("Fecha de muerte desonocida o el autor aún vive.");
}
});
// Mostrar en qué idiomas se halla disponible el libro:
System.out.println("Idiomas disponibles: " + String.join(", ", libro.idiomas()));
});
Al record "DatosAutor" le agregué un dato:
@JsonAlias("death_year") String fechaDeMuerte
Esto lo hago, porque también quiero mostrar la fecha de muerte de los autores.
Aquí está mi proyecto completo en github: https://github.com/Lady-Marianne/desafio-spring-boot.git