2
respostas

Pesquisa data serie

Olá a todos! No console digito o nome da série e ao inserir o ano a partir que desjo ver a lista não funciona a menos que digite a tecla enter duas vezes. Alguém poderia me ajudar?

Código:

package br.com.academia.series.principal;

import br.com.academia.series.model.DadosEpisodio;
import br.com.academia.series.model.DadosSerie;
import br.com.academia.series.model.DadosTemporada;
import br.com.academia.series.model.Episodio;
import br.com.academia.series.service.ConsumoApi;
import br.com.academia.series.service.ConverteDados;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;

public class Principal {

    private static Scanner leitura = new Scanner(System.in);
    private static ConsumoApi consumo = new ConsumoApi();
    private static ConverteDados conversor = new ConverteDados();
    private static final String ENDERECO = "https://www.omdbapi.com/?t=";
    private static final String API_KEY = "&apikey=4e80e981";
    public static void exibeMenu(){

        System.out.println("Digite o nome da séria para busca");
        var nomeSerie = leitura.nextLine();
        var json = consumo.obterDados(ENDERECO + nomeSerie.replace(" ", "+") + API_KEY);
        DadosSerie dados = conversor.obterDados(json, DadosSerie.class);
        //"https://www.omdbapi.com/?t=Breaking+Bad&apikey=4e80e981"
        System.out.println(dados);

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

        for (int i = 1; i<=dados.totalTemporadas(); i++){
            json = consumo.obterDados(ENDERECO + nomeSerie.replace(" ", "+") +"&season=" + i + API_KEY);
            DadosTemporada dadosTemporada = conversor.obterDados(json, DadosTemporada.class);
            temporadas.add(dadosTemporada);

        }//lambda
        temporadas.forEach(System.out::println);

//        for(int i = 0; i < dados.totalTemporadas(); i++){
//            List<DadosEpisodio> episodiosTemporada = temporadas.get(i).episodios();
//            for(int j = 0; j < episodiosTemporada.size(); j++){
//                System.out.println(episodiosTemporada.get(j).titulo());
//            }
//        }
        //Recurso Java 8
        temporadas.forEach(t -> t.episodios().forEach(e -> System.out.println(e.titulo())));
        //temporadas.forEach(System.out::println);
//        List<String> nomes = Arrays.asList("Carlos", "Borges", "Giovanne", "Gabriel", "Wentz");
//        nomes.stream()
//                .sorted()
//                .forEach(System.out::println);
        List<DadosEpisodio> dadosEpisodios = temporadas.stream()
                .flatMap(t -> t.episodios().stream())
                .collect(Collectors.toList());

        System.out.println("\nTop 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 = leitura.nextLine();
        leitura.nextLine();

        LocalDate dataBusca = LocalDate.of(Integer.parseInt(ano), 1, 1);

        DateTimeFormatter formatador = DateTimeFormatter.ofPattern("dd/MM/yyyy");

        episodios.stream()
                .filter(e -> e.getDataLancamento() != null && e.getDataLancamento().isAfter(dataBusca))
                .forEach(e -> System.out.println(
                        "Temporada: " + e.getTemporada() +
                                "Episodio: " + e.getTitulo() +
                                "Data lançamento: " + e.getDataLancamento().format(formatador)
                ));
    }
}
2 respostas

Corrigido o erro nessa linha docódigo:

Antes: var ano = leitura.nextLine(); Corrigido: var ano = leitura.nextInt();

Grato.

Boa tarde Carlos! Tudo bem com você?

Fico feliz em saber que conseguiu solucionar o erro apresentado, esse retorno informando é muito importante.

Conte com o apoio do Fórum na sua jornada. Fico à disposição.

Abraços e bons estudos!