package br.com.alura.screematch.modelos;
public class Episodio implements Comparable { private int temporada; private String titulo; private int numero; private double avaliacao;
public Episodio(int temporada, DadosEpisodio dadosEpisodio) {
this.temporada = temporada;
this.titulo = dadosEpisodio.getTitle();
this.numero = Integer.parseInt(dadosEpisodio.getEpisode());
this.avaliacao = dadosEpisodio.getImdbRating() != null && !dadosEpisodio.getImdbRating().equals("N/A")
? Double.parseDouble(dadosEpisodio.getImdbRating())
: 0.0;
}
public int getTemporada() {
return temporada;
}
public String getTitulo() {
return titulo;
}
public int getNumero() {
return numero;
}
public double getAvaliacao() {
return avaliacao;
}
@Override
public int compareTo(Episodio outro) {
return Double.compare(outro.avaliacao, this.avaliacao); // decrescente
}
@Override
public String toString() {
return "Temporada " + temporada + " - Episódio " + numero +
": " + titulo + " (Avaliação: " + avaliacao + ")";
}
}
List<Episodio> episodios = new ArrayList<>();
for (int i = 1; i <= totalTemporadas; i++) { String urlTemporada = "https://www.omdbapi.com/?t=" + nomeSerie + "&Season=" + i + "&apikey=fa9f1b6b"; HttpRequest requestTemporada = HttpRequest.newBuilder().uri(URI.create(urlTemporada)).build(); HttpResponse responseTemporada = client.send(requestTemporada, HttpResponse.BodyHandlers.ofString());
DadosTemporada dadosTemporada = gson.fromJson(responseTemporada.body(), DadosTemporada.class);
for (DadosEpisodio dados : dadosTemporada.getEpisodios()) {
Episodio episodio = new Episodio(i, dados);
episodios.add(episodio);
}
}
System.out.println("\nTop 5 episódios mais bem avaliados:");
episodios.stream() .sorted() // já usa Comparable .limit(5) .forEach(System.out::println);
System.out.print("\nDigite o ano para filtrar episódios: ");
int anoFiltro = Integer.parseInt(leitura.nextLine());
System.out.println("\nEpisódios a partir de " + anoFiltro + ":");
episodios.stream() .filter(e -> { try { return Integer.parseInt(e.getDataLancamento().split("-")[0]) >= anoFiltro; } catch (Exception ex) { return false; } }) .forEach(System.out::println);
public class DadosEpisodio {
private String Title;
private String Episode;
private String imdbRating;
private String Released;
public String getTitle() {
return Title;
}
public String getEpisode() {
return Episode;
}
public String getImdbRating() {
return imdbRating;
}
public String getReleased() {
return Released;
}
}
public class DadosTemporada { private List Episodes;
public List<DadosEpisodio> getEpisodios() {
return Episodes;
}
}