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

Haz como yo hice

import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public record DatosEpisodio(
@JsonAlias("Title") String titulo,
@JsonAlias("Episode") Integer numero,
@JsonAlias("imdbRating") String evaluacion,
@JsonAlias("Released") String fechaLanzamiento
) {
}

import java.time.LocalDate;

public class Episodio {
private Integer temporada;
private String titulo;
private Integer numeroEpisodio;
private Double evaluacion;
private LocalDate fechaLanzamiento;

public Episodio(Integer numeroTemporada, DatosEpisodio datosEpisodio) {
    this.temporada = numeroTemporada;
    this.titulo = datosEpisodio.titulo();
    this.numeroEpisodio = datosEpisodio.numero();

    try {
        this.evaluacion = Double.valueOf(datosEpisodio.evaluacion());
    } catch (NumberFormatException e) {
        this.evaluacion = 0.0;
    }

    try {
        this.fechaLanzamiento = LocalDate.parse(datosEpisodio.fechaLanzamiento());
    } catch (Exception e) {
        this.fechaLanzamiento = null;
    }
}

public Integer getTemporada() {
    return temporada;
}

public String getTitulo() {
    return titulo;
}

public Integer getNumeroEpisodio() {
    return numeroEpisodio;
}

public Double getEvaluacion() {
    return evaluacion;
}

public LocalDate getFechaLanzamiento() {
    return fechaLanzamiento;
}

@Override
public String toString() {
    return "temporada=" + temporada +
            ", titulo='" + titulo + '\'' +
            ", numeroEpisodio=" + numeroEpisodio +
            ", evaluacion=" + evaluacion +
            ", fechaLanzamiento=" + fechaLanzamiento;
}

}

List episodios = temporadas.stream()
.flatMap(t -> t.episodios().stream()
.map(d -> new Episodio(t.numero(), d)))
.toList();

System.out.println("Top 5 episodios:");

episodios.stream()
.filter(e -> e.getEvaluacion() > 0.0)
.sorted(Comparator.comparing(Episodio::getEvaluacion).reversed())
.limit(5)
.forEach(System.out::println);

System.out.println("¿A partir de qué año deseas ver los episodios?");

var año = teclado.nextInt();
teclado.nextLine();

LocalDate fechaBusqueda = LocalDate.of(año, 1, 1);

episodios.stream()
.filter(e -> e.getFechaLanzamiento() != null)
.filter(e -> e.getFechaLanzamiento().isAfter(fechaBusqueda))
.forEach(System.out::println);

.filter(e -> e.getFechaLanzamiento() != null)

.filter(e -> !e.getFechaLanzamiento().isBefore(fechaBusqueda))

import java.time.LocalDate;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

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

public void muestraElMenu() {
    System.out.println("Escribe el nombre de la serie:");
    var nombreSerie = teclado.nextLine();

    var json = consumoApi.obtenerDatos(URL_BASE + nombreSerie.replace(" ", "+") + API_KEY);
    DatosSerie datosSerie = conversor.obtenerDatos(json, DatosSerie.class);

    List<DatosTemporada> temporadas = new ArrayList<>();

    for (int i = 1; i <= datosSerie.totalTemporadas(); i++) {
        json = consumoApi.obtenerDatos(URL_BASE + nombreSerie.replace(" ", "+") + "&season=" + i + API_KEY);
        DatosTemporada datosTemporada = conversor.obtenerDatos(json, DatosTemporada.class);
        temporadas.add(datosTemporada);
    }

    List<Episodio> episodios = temporadas.stream()
            .flatMap(t -> t.episodios().stream()
                    .map(d -> new Episodio(t.numero(), d)))
            .toList();

    System.out.println("\nTop 5 episodios:");
    episodios.stream()
            .filter(e -> e.getEvaluacion() > 0.0)
            .sorted(Comparator.comparing(Episodio::getEvaluacion).reversed())
            .limit(5)
            .forEach(System.out::println);

    System.out.println("\n¿A partir de qué año deseas ver los episodios?");
    var año = teclado.nextInt();
    teclado.nextLine();

    LocalDate fechaBusqueda = LocalDate.of(año, 1, 1);

    System.out.println("\nEpisodios encontrados:");
    episodios.stream()
            .filter(e -> e.getFechaLanzamiento() != null)
            .filter(e -> !e.getFechaLanzamiento().isBefore(fechaBusqueda))