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

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))
          
1 respuesta

Hola David,

Gracias por compartir tu código con nosotros. Es muy bueno ver cómo vas poniendo en práctica lo que aprendes.

Te recomiendo que puedas interactuar con el resto de nuestros compañeros por nuestro Discord.

En virtud de que en Discord el alcance es mayor, la interacción es inmediata y llega a más compañeros, y el foro solo quedaría para esclarecer cualquier duda que puedas tener sobre el contenido de los cursos.

De esa manera, si quieres seguir compartiendo tus soluciones y proyectos, sea por el Discord — con certeza por ahí llegará a más personas.

¡Gracias nuevamente!

Saludos,

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