Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Proyecto final (desafío extra)

package com.entronomia.aplicaciones.biblioteca;

import com.entronomia.aplicaciones.biblioteca.modelo.DatosAutor;
import com.entronomia.aplicaciones.biblioteca.modelo.DatosBiblioteca;
import com.entronomia.aplicaciones.biblioteca.modelo.DatosLibro;
import com.entronomia.aplicaciones.biblioteca.modelo.Libro;
import com.entronomia.aplicaciones.biblioteca.servicio.ConsumoAPI;
import com.entronomia.aplicaciones.biblioteca.servicio.ConversorDatos;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;

@SpringBootApplication
public class BibliotecaApplication implements CommandLineRunner {

    public static void main(String[] args) {
        SpringApplication.run(BibliotecaApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        ConsumoAPI consumoAPI = new ConsumoAPI();
        ConversorDatos conversorDatos = new ConversorDatos();
        Scanner entrada = new Scanner(System.in);
        DatosLibro datosLibro = null;
        DatosAutor datosAutor = null;
        DatosBiblioteca datosBiblioteca = null;
        List<Libro> librosEnPagina = new ArrayList<>();
        List<Libro> inventario = new ArrayList<>();
        for (int i = 1; i <= 28; i++) {
            String json = consumoAPI.obtenerDatos("https://gutendex.com/books/?languages=es&page="+i);
            datosBiblioteca = conversorDatos.obtenerDatos(json, DatosBiblioteca.class);
            librosEnPagina = datosBiblioteca.datosBiblioteca().stream().map(l -> new Libro(l)).toList();
            inventario.addAll(librosEnPagina);
        }
        System.out.println(inventario);

        DoubleSummaryStatistics estadisticas = inventario.stream()
                .collect(Collectors.summarizingDouble(Libro::getDescargas));
        System.out.println(estadisticas);
        System.out.println("Promedio de las descargas: " + estadisticas.getAverage());
        System.out.println("Libro mas descargado: " + estadisticas.getMax());
        System.out.println("Libro menos descargado: " + estadisticas.getMin());

        System.out.println("Apellido del autor a buscar (letras minusculas): ");
        String nombreAutor = entrada.nextLine();
        json = consumoAPI.obtenerDatos("https://gutendex.com/books/?search="+nombreAutor);
        System.out.println(json);
        var resultadoConsulta = conversorDatos.obtenerDatos(json, DatosBiblioteca.class);
        System.out.println(resultadoConsulta);*/

        //Los 10 libros mas descargados
        System.out.println("Los 10 libros mas descargados");
        inventario.stream()
                .sorted(Comparator.comparing(Libro::getDescargas).reversed())
                .limit(10)
                .map(libro -> libro.getTitulo().toUpperCase())
                .forEach(System.out::println);
    }
}
package com.entronomia.aplicaciones.biblioteca.modelo;

@JsonIgnoreProperties(ignoreUnknown = true)
public record DatosBiblioteca(
        @JsonAlias("count") Integer cantidadDeLibros,
        @JsonAlias("results") ArrayList<DatosLibro> datosBiblioteca
        ) {
}
package com.entronomia.aplicaciones.biblioteca.modelo;

@JsonIgnoreProperties(ignoreUnknown = true)
public record DatosLibro(
        @JsonAlias("id") Integer id,
        @JsonAlias("title") String titulo,
        @JsonAlias("authors") ArrayList<DatosAutor> autores,
        @JsonAlias("download_count") Integer descargas
        ) {
}
package com.entronomia.aplicaciones.biblioteca.modelo;

@JsonIgnoreProperties(ignoreUnknown = true)
public record DatosAutor(
        @JsonAlias("name") String nombre,
        @JsonAlias("birth_year") String annoDeNacimiento,
        @JsonAlias("death_year") String annoDeDeceso
        ) {
}
package com.entronomia.aplicaciones.biblioteca.modelo;

public class Libro {
    private Integer numeroID;
    private String titulo;
    private List<DatosAutor> autor;
    private Integer descargas;

    public Libro(DatosLibro l) {
        this.numeroID = l.id();
        this.titulo = l.titulo();
        this.autor = l.autores();
        this.descargas = l.descargas();
    }

    public Integer getNumeroID() {
        return numeroID;
    }

    public String getTitulo() {
        return titulo;
    }

    public List<DatosAutor> getAutor() {
        return autor;
    }

    public Integer getDescargas() {
        return descargas;
    }

    @Override
    public String toString() {
        return  "numeroID=" + numeroID +
                ", titulo='" + titulo + '\'' +
                ", autor='" + autor + '\'' +
                ", descargas=" + descargas;
    }
}
1 respuesta

Hola Roberto! ¿Cómo estás?

Gracias por compartir tu código con nosotros. Sigue así y no dudes en volver al foro si tienes alguna pregunta o dificultad.

¡Gracias nuevamente! Saludos,

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios!