Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Projeto] Faça como eu fiz.

Método peek


       out.println("\nTop 10 episódios");
        dadosEpisodios.stream()
                .filter(e -> !e.avaliacao().equalsIgnoreCase("N/A"))
                .peek(e -> out.println("Primeiro filtro (N/A) " + e))
                .sorted(Comparator.comparing(DadosEpisodio::avaliacao).reversed())
                .peek(e -> out.println("Ordenação " + e))
                .limit(10)
                .peek(e -> out.println("Limite " + e))
                .map(e -> e.titulo().toUpperCase())
                .peek(e -> out.println("Mapeamento " + e))
                .forEach(out::println);

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

        episodios.forEach(out::println);
        

Estatísticas de média de avaliações por temporada e Classe DoubleSummaryStatistics.

 Map<Integer, Double> avaliacoesPorTemporada = episodios.stream()
                 .filter(e -> e.getAvaliacao() > 0.0)
                 .collect(Collectors.groupingBy(Episodio::getTemporada,
                         Collectors.averagingDouble(Episodio::getAvaliacao)));
         System.out.println(avaliacoesPorTemporada);

        DoubleSummaryStatistics est = episodios.stream()
                .filter(e -> e.getAvaliacao() > 0.0)
                .collect(Collectors.summarizingDouble(Episodio::getAvaliacao));
        out.println("Média: " + est.getAverage());
        out.println("Melhor episódio: " + est.getMax());
        out.println("Pior episodio:  " + est.getMin());
        out.println("Quantidade: " + est.getCount());
    }
}
2 respostas
solução!

Oi, Giulia!

Meus parabéns por concluir essa etapa do projeto. É muito satisfatório ver como você utilizou as Streams do Java para realizar operações complexas de forma declarativa, demonstrando um domínio bom sobre o processamento de coleções e a geração de métricas.

Sua implementação mostra que você compreendeu perfeitamente o poder do encadeamento de métodos. O uso do .peek() é uma estratégia excelente para depuração, pois permite "espiar" o que está acontecendo em cada etapa do pipeline sem interromper o fluxo dos dados. E, a forma como você estruturou o agrupamento por temporada e o uso da classe DoubleSummaryStatistics mostra um cuidado técnico com a performance, já que você obtém várias métricas em uma única passagem pelos dados.

Conseguiu perceber como o código fica muito mais limpo e fácil de ler quando usamos Streams em vez de vários laços for e condicionais if espalhados?

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Oii, Lorena!!
Muito obrigada por ter me explicado melhor e por ter mandado os artigos anteriores também.
Eles me ajudaram muito a clarear a minha mente. Principalmente eu que sou da área do Direito e acabei de entrar nessa área de tecnologia (no escuro) e tudo está sendo muito novo para mim!! Obrigada pelos seus feedbacks : ))