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

[Proyecto] Mi recomendacion

//Siempre agregar saltos de linea para identificar mejor los procedimientos package alura.RacsoFilm.principal;

public class Principal {

private Scanner teclado = new Scanner(System.in);
private ConsumoApi consumoApi = new ConsumoApi();
private final String URL_BASE = "https://www.omdbapi.com/?t=";
private final String API_KEY = "&apikey=17c1aa82";
private ConvierteDatos conversor = new ConvierteDatos();

public void muestraMenu(){
    System.out.println("Por favor escribe, el nombre de la serie que deseas buscar: ");
    //Busca los datos generales de las series
    var nombreSerie = teclado.nextLine();
    var json = consumoApi.obtenerDatos(URL_BASE + nombreSerie.replace(" ", "+") + API_KEY);
    var datos = conversor.obtenerDatos(json, DatosSerie.class);
    System.out.println(datos + "\n");

    //Busca los datos de todas las temporadas
    List<DatosTemporadas> temporadas = new ArrayList<>();
    for (int i = 1; i <= datos.totalTemporadas(); i++) {
        json = consumoApi.obtenerDatos(URL_BASE + nombreSerie.replace(" ", "+") + "&Season=" +i+ API_KEY);
        var datosTemporadas = conversor.obtenerDatos(json, DatosTemporadas.class);
        temporadas.add(datosTemporadas);
    }
    //Imprimiendo lo de la lista
    //temporadas.forEach(System.out::println);
    
    //Simplificando el for int anterior
    temporadas.forEach(t -> t.episodios().forEach(e -> System.out.println(e.titulo())));

    //Convertir toda las informaciones o una lista del tipo DatosEpisodio
    List<DatosEpisodio> datosEpisodios = temporadas.stream()
            .flatMap(t -> t.episodios().stream())
            /* Lista mutable que pueda cambiar con el tiempo */
            .collect(Collectors.toList());

    //Conviertiendo los datos a una lista del tipo Episodio
    List<Episodio> episodios = temporadas.stream()
            .flatMap(t -> t.episodios().stream()
            .map(d -> new Episodio(t.numero(),d)))
            .collect(Collectors.toList());

    //Imprimir los episodios
    episodios.forEach(System.out::println);

    /* System.out.println("\n");
    //Busqueda de episodios apartir de un año especifico
    System.out.println("Indica el año apartir del cual deseas ver los episodios, por favor");
    var fecha = teclado.nextInt();
    teclado.nextLine();

    LocalDate fechaBusqueda = LocalDate.of(fecha, 1, 1);
    DateTimeFormatter formatoFecha = DateTimeFormatter.ofPattern("dd/MM/yyyy");

    episodios.stream()
            .filter(e -> e.getFechaLanzamiento() != null && e.getFechaLanzamiento().isAfter(fechaBusqueda))
    .forEach(e -> System.out.println(
            "Temporada " + e.getTemporada() +
                    "Episodio " + e.getTitulo() +
                    "Fecha de Lanzamiento " + e.getFechaLanzamiento().format(formatoFecha)
    )); */

    //Busca episodios por frases del titulo
    /* System.out.println("Escriba la frase del titulo que desea ver, por favor");
    var fraseTitulo = teclado.nextLine();
    Optional<Episodio> episodioBuscado = episodios.stream()
            .filter(e -> e.getTitulo().toUpperCase().contains(fraseTitulo.toUpperCase()))
            .findFirst();
    if(episodioBuscado.isPresent()){
        System.out.println("Episodio encontrado: ");
        System.out.println("Los datos son: " + episodioBuscado.get());
    }else{
        System.out.println("Episodio no encontrado." + "\n");
    } */

    //Creando evaluacion por temporada
    Map<Integer, Double> evaluacionTemporada = episodios.stream()
            .filter(e -> e.getEvaluacion() > 0.0)
            .collect(Collectors.groupingBy(Episodio::getTemporada,
                    Collectors.averagingDouble(Episodio::getEvaluacion)));
    System.out.println("Evaluacion por temporada: " + evaluacionTemporada);

    //Estadisticas
    DoubleSummaryStatistics estadisticas = episodios.stream()
            .filter(e -> e.getEvaluacion() > 0.0)
            .collect(Collectors.summarizingDouble(Episodio::getEvaluacion));
    System.out.println("\n");
    System.out.println("Media de la serie: " + estadisticas.getAverage());
    System.out.println("Episodio mejor evaluado: " + estadisticas.getMax());
    System.out.println("Episodio peor evaluado: " + estadisticas.getMin());
}

}

1 respuesta

Hola Oscar, espero te encuentres bien!

Gracias por compartir tu código con nosotros. Recuerda que estamos aquí para ayudarte. Si necesitas ayuda, no dudes en buscarnos en el foro.

¡Gracias nuevamente!

Saludos,

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