1
resposta

Erro ao Criar um mapa com dados por temporada

Bom dia/tade/noite! Gostaria de relatar um problema do meu código ao tentar criar uma o Map para avaliações da temporada, segue o código:

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);

O código esta gerando um NullPointerException,


java.lang.NullPointerException: Cannot invoke "java.lang.Double.doubleValue()" because the return value of "br.com.alura.screenmatch.model.Episodio.getAvaliacao()" is null
    at br.com.alura.screenmatch.principal.Principal.lambda$exibeMenu$5(Principal.java:81) ~[classes/:na]
    at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:178) ~[na:na]
    at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[na:na]
    at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na]
    at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) ~[na:na]
    at br.com.alura.screenmatch.principal.Principal.exibeMenu(Principal.java:82) ~[classes/:na]
    
1 resposta

Olá, Gabriel!

Pelo que você descreveu e pelo erro que está sendo apresentado, parece que algum dos episódios na sua lista tem um valor null para o método getAvaliacao(). Isso está causando o NullPointerException quando você tenta invocar doubleValue().

Uma maneira para tentar resolver isso seria adicionar uma verificação adicional no seu filtro para garantir que a avaliação não seja null antes de verificar se ela é maior que 0.0. Aqui está um exemplo de como você poderia fazer isso:

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

Neste exemplo, o filtro agora verifica se getAvaliacao() não é null antes de verificar se é maior que 0.0. Isso deve prevenir o NullPointerException.

Espero ter ajudado. Qualquer dúvida manda aqui. Bons estudos!