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

Haga lo que hicimos

fecha de lanzamiento

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

public Episodio(Integer temporada, DatosEpisodio datosEpisodio) {
    this.temporada = temporada;
    this.titulo = datosEpisodio.titutlo();
    this.numeroEpisodio = datosEpisodio.numeroEpisodio();
    try {
        this.evaluacion = Double.valueOf(datosEpisodio.evaluacion()) ;
    } catch (NumberFormatException ex){
        this.evaluacion = 0.0;
    }
    try{
        this.fechaDeLanzamiento = LocalDate.parse(datosEpisodio.fechaDeLanzamiento());
    }catch (DateTimeParseException ex){
        this.fechaDeLanzamiento = null;
    }

}

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

public Integer getTemporada() {
    return temporada;
}

public void setTemporada(Integer temporada) {
    this.temporada = temporada;
}

public String getTitulo() {
    return titulo;
}

public void setTitulo(String titulo) {
    this.titulo = titulo;
}

public Integer getNumeroEpisodio() {
    return numeroEpisodio;
}

public void setNumeroEpisodio(Integer numeroEpisodio) {
    this.numeroEpisodio = numeroEpisodio;
}

public Double getEvaluacion() {
    return evaluacion;
}

public void setEvaluacion(Double evaluacion) {
    this.evaluacion = evaluacion;
}

public LocalDate getFechaDeLanzamiento() {
    return fechaDeLanzamiento;
}

p

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

    for (int i = 1; i <= datos.totalTemporadas(); i++) {
        json = consumoAPI.obtenerDatos(URL + nombreSerie.replace(" ", "+") + "&Season=" + i + APIKEY);
        DatosTemporada datosTemporada = conversor.obtenerDatos(json, DatosTemporada.class);
        temporadas.add(datosTemporada);
    }
    temporadas.forEach(System.out::println);

    for (int i = 0; i < datos.totalTemporadas(); i++) {
        List<DatosEpisodio> episodiosTemporadas = temporadas.get(i).episodios();
        for (int j = 0; j < episodiosTemporadas.size(); j++) {
            System.out.println(episodiosTemporadas.get(j).titutlo());
        }
    }
    temporadas.forEach(t -> t.episodios().forEach(e -> System.out.println(e.titutlo())));
   
    List<String> nombres = Arrays.asList("Genesys","Eric","Maria","Brenda");

    nombres.stream()
            .sorted()
            .limit(2)
            .filter(n -> n.startsWith("E"))
            .map(n -> n.toUpperCase())
            .forEach(System.out::println);

    List<DatosEpisodio> datosEpisodios = temporadas.stream()
            .flatMap(t -> t.episodios().stream())
            .collect(Collectors.toList());
    System.out.println("\n Top 5 episodios");

    datosEpisodios.stream()
            .filter(e -> !e.evaluacion().equalsIgnoreCase("N/A"))
            .sorted(Comparator.comparing(DatosEpisodio::evaluacion).reversed())
            .limit(5)
            .forEach(System.out::println);

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

    episodios.forEach(System.out::println);

    System.out.println("a partir de que año deseas ver los episodios?");
    var fecha = teclado.nextInt();
    teclado.nextLine();

    LocalDate fechaBusqueda = LocalDate.of(fecha, 1, 1);

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
    episodios.stream()
            .filter(e -> e.getFechaDeLanzamiento() != null && e.getFechaDeLanzamiento().isAfter(fechaBusqueda))
            .forEach(e -> System.out.println(
                    "Temporada: " + e.getTemporada() +
                            " Episodio: " + e.getTitulo() +
                            " Fecha de Lanzamiento: " + e.getFechaDeLanzamiento().format(formatter)
            ));
 
}

}

1 respuesta

Hola Yolima, espero que estés bien

Parece que estás trabajando en un ejercicio donde necesitas manipular datos de episodios usando Streams en Java. Vamos a revisar algunos puntos clave para ayudarte con tu implementación:

  1. Creación de List<Episodio>:
    Ya has implementado correctamente la conversión de List<DatosEpisodio> a List<Episodio>. Estás utilizando flatMap para recorrer las temporadas y luego mapear cada DatosEpisodio a un nuevo objeto Episodio. Esto es correcto y parece que lo tienes bien implementado.

  2. Impresión de los 5 mejores episodios:
    En tu código, estás filtrando los episodios que tienen una evaluación válida y luego los ordenas en orden descendente de evaluación. Después, limitas el resultado a los 5 mejores episodios y los imprimes. Asegúrate de que el método evaluacion() de DatosEpisodio devuelve un valor que puede ser comparado correctamente (parece que ya estás manejando el caso de "N/A" correctamente).

  3. Búsqueda de episodios a partir de un año específico:
    Estás pidiendo al usuario una fecha y luego filtrando los episodios que tienen una fecha de lanzamiento posterior a la fecha proporcionada. Esto también parece estar bien implementado. Solo asegúrate de que el formato de fecha que estás utilizando (dd/MM/yyyy) sea el que deseas para la salida.

Un pequeño detalle que podrías revisar es la impresión de los títulos de los episodios. Asegúrate de que el método titutlo() en DatosEpisodio esté correctamente escrito, ya que en algunas partes del código parece haber un error tipográfico ("titutlo" en lugar de "titulo").

Espero que estos puntos te ayuden a avanzar en tu ejercicio. ¡Bons estudios!