package br.com.alura.screenmatch.model;
import java.time.LocalDate;
import java.time.format.DateTimeParseException;
public class Episodio {
private Integer temporada;
private String titulo;
private Integer numeroEpisodio;
private Double avaliacao;
private LocalDate dataLancamento;
public Episodio(Integer numeroTemporada, DadosEpisodio dadosEpisodio) {
this.temporada = numeroTemporada;
this.titulo = dadosEpisodio.titulo();
this.numeroEpisodio = dadosEpisodio.numero();
try {
this.avaliacao = Double.valueOf(dadosEpisodio.avaliacao());
} catch (NumberFormatException ex) {
this.avaliacao = 0.0;
}
try {
this.dataLancamento = LocalDate.parse(dadosEpisodio.dataLancamento());
} catch (DateTimeParseException ex) {
this.dataLancamento = null;
}
}
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 getAvaliacao() {
return avaliacao;
}
public void setAvaliacao(Double avaliacao) {
this.avaliacao = avaliacao;
}
public LocalDate getDataLancamento() {
return dataLancamento;
}
public void setDataLancamento(LocalDate dataLancamento) {
this.dataLancamento = dataLancamento;
}
@Override
public String toString() {
return "temporada=" + temporada +
", titulo='" + titulo + '\'' +
", numeroEpisodio=" + numeroEpisodio +
", avaliacao=" + avaliacao +
", dataLancamento=" + dataLancamento;
}
}
package br.com.alura.screenmatch.principal;
import ...
public class Principal {
private Scanner scanner = new Scanner(System.in);
private ConsumoApi consumoApi = new ConsumoApi();
private ConverteDados conversor = new ConverteDados();
private final String ENDERECO = "https://www.omdbapi.com/?t=";
private final String API_KEY = "&apikey=f64fbab";
public void exibeMenu() {
System.out.println("Digite o nome da série para busca: ");
var nomeSerie = scanner.nextLine();
var json = consumoApi.obterDados(ENDERECO + nomeSerie.replace(" ", "+") + API_KEY);
DadosSerie dados = conversor.obterDados(json, DadosSerie.class);
System.out.println(dados);
List<DadosTemporada> temporadas = new ArrayList<>();
for (int i = 1; i <= dados.totalTemporadas(); i++) {
json = consumoApi.obterDados(ENDERECO + nomeSerie.replace(" ", "+") + "&season=" + i + API_KEY);
DadosTemporada dadosTemporada = conversor.obterDados(json, DadosTemporada.class);
temporadas.add(dadosTemporada);
}
temporadas.forEach(System.out::println);
temporadas.forEach(t -> t.episodios().forEach(e -> System.out.println(e.titulo())));
List<DadosEpisodio> dadosEpisodios = temporadas.stream()
.flatMap(t -> t.episodios().stream())
.collect(Collectors.toList());
System.out.println("\n Top 5 episódios");
dadosEpisodios.stream()
.filter(e -> !e.avaliacao().equalsIgnoreCase("N/A"))
.sorted(Comparator.comparing(DadosEpisodio::avaliacao).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 ano você deseja ver os episódios?");
var ano = scanner.nextInt();
scanner.nextLine();
LocalDate dataBusca = LocalDate.of(ano, 1, 1);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
episodios.stream()
.filter(e -> e.getDataLancamento() != null && e.getDataLancamento().isAfter(dataBusca))
.forEach(e -> System.out.println(
"Temporada: " + e.getTemporada() +
" Episódio: " + e.getTitulo() +
" Data lançamento: " + e.getDataLancamento().format(formatter)
));
}
}