me esforce pero entendi
package com.aluracurso.screenmatch.principal;
import com.aluracurso.screenmatch.model.DatosEpisodio;
import com.aluracurso.screenmatch.model.DatosSerie;
import com.aluracurso.screenmatch.model.DatosTemporadas;
import com.aluracurso.screenmatch.model.Episodio;
import com.aluracurso.screenmatch.service.ConsumoApi;
import com.aluracurso.screenmatch.service.ConvierteDatos;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;
public class Principal {
private Scanner teclado = new Scanner(System.in);
private ConsumoApi consumoApi = new ConsumoApi();
private static final String URL_BASE="https://www.omdbapi.com/?t=";
private static final String API_KEY = "&apikey=a76956f8";
private final ConvierteDatos conversor = new ConvierteDatos();
public void muestraElMenu(){
System.out.println("Por favor escribir el nombre dela serie que quieres 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);
//busca los datos de todas las temporadas
List<DatosTemporadas> temporadas = new ArrayList<>();
for (int i = 1; i <= datos.totalDeTemporadas(); i++) {
json= consumoApi.obtenerDatos(URL_BASE + nombreSerie.replace(" ", "+") + "&Season="+i+API_KEY);
var datosTemporadas =conversor.obtenerDatos(json, DatosTemporadas.class);
temporadas.add(datosTemporadas);
}
//temporadas.forEach(System.out::println);
//Mostrar el titulo de los episodios para las temporadas
// for (int i = 0; i < datos.totalDeTemporadas() ; i++) {
// List<DatosEpisodio> episodiosTemporada = temporadas.get(i).episodios();
// for (int j = 0; j < episodiosTemporada.size() ; j++) {
// System.out.println(episodiosTemporada.get(j).titulo());
// }
// }
// mejoria usando funcion lambda
//temporadas.forEach(t -> t.episodios().forEach(e -> System.out.println(e.titulo())));
// converti todas las informaciones a una lista de tipo Datos Episodio
List<DatosEpisodio> datosEpisodios = temporadas.stream()
.flatMap(t -> t.episodios().stream())
//.toList()
.collect(Collectors.toList());
// top 5 episodios
System.out.println("Top 5 de episodios =");
datosEpisodios.stream()
.filter(e -> !e.evaluacion().equalsIgnoreCase("N/A"))
.sorted(Comparator.comparing(DatosEpisodio::evaluacion).reversed())
.limit(5)
.forEach(System.out::println);
// convirtiendo los datos a una lista de Tipo episodio
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);
// busqueda de episofios filtrado por años
System.out.println(" por favor indica el año a partir que deseas ver episodios");
var fecha = teclado.nextInt();
teclado.nextLine();
LocalDate fechaBusqueda = LocalDate.of(fecha,1,1);
DateTimeFormatter dtf = 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(dtf)
) );
}
}