Oi, pessoal! Não entendi muito bem o que foi feito nesse trecho de código, o que é essa coleção de dados 'Map' e tb os comandos que foram utilizados (Collectors.groupingBy, etc...). Poderiam me explicar com mais detalhes, por favor?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Oi, pessoal! Não entendi muito bem o que foi feito nesse trecho de código, o que é essa coleção de dados 'Map' e tb os comandos que foram utilizados (Collectors.groupingBy, etc...). Poderiam me explicar com mais detalhes, por favor?
Oi, Miguel, tudo bem?
O Map é uma interface do Java que faz parte do framework de coleções. Ela armazena os dados em pares de chave e valor. Cada chave é única, e a ela está associado um valor. No contexto do código da aula, o Map<Integer, Double> representa um mapa onde cada chave é um Integer (representando a temporada de uma série) e cada valor é um Double (representando a média das avaliações daquela temporada).
O Collectors.groupingBy é um método da classe Collectors que é frequentemente usado com stream().collect() para realizar agrupamentos de dados. Neste caso, Episodio::getTemporada é usado como classificador, o que significa que os episódios serão agrupados pela temporada a que pertencem.
O Collectors.averagingDouble é outro coletor que calcula a média dos valores double fornecidos. Aqui, Episodio::getAvaliacao é uma função que extrai a avaliação de cada episódio, e averagingDouble calcula a média dessas avaliações.
Agora podemos explicar o código todo:
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);
episodios.stream(): cria um fluxo de dados a partir da lista de episódios..filter(e -> e.getAvaliacao() > 0.0): filtra os episódios para incluir apenas aqueles com avaliação maior que 0.0..collect(...): coleta os dados processados pelo stream.Collectors.groupingBy(Episodio::getTemporada, Collectors.averagingDouble(Episodio::getAvaliacao)): agrupa os episódios por temporada e calcula a média das avaliações para cada grupo (temporada).System.out.println(avaliacoesPorTemporada): imprime o mapa resultante, que contém a média das avaliações por temporada.Espero ter ajudado. Caso tenha dúvidas, conte com o fórum. Abraços!