Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Não seria melhor usar um parse ao invés de

Basicamente isso.

O .sorted(Comparator.comparing(DadosEpisodio::avaliacao)) está considerando algum episódio com nota 10 como se fosse nota 1, pois o campo está como string. Não seria melhor usar realizar um parse antes de realizar a comparação?


ps: Em outro pontto, aproveitando o post... Seria possível dar uma explicação um do que está acontecendo nesse comparing? Comparator.comparing(DadosEpisodio::avaliacao) Para mim está parecendo que está usando atributo avaliação da classe DadosEpisódio como base para a comparação, puxando diretamente da classe ao invés do Objeto do tipo DadosEpisódio que está sendo passado da List.

É isso mesmo?

1 resposta
solução!

Olá, Rafael!

Você está absolutamente correto em ambas as suas observações.

Em relação à sua primeira dúvida, sim, seria mais adequado realizar um parse antes da comparação. Isso ocorre porque, como você mencionou, o campo de avaliação está sendo tratado como uma string. Portanto, a comparação está sendo feita de maneira alfabética e não numérica, o que pode levar a resultados inesperados, como o episódio com nota 10 sendo considerado como se fosse nota 1.

Para resolver isso, você poderia fazer algo assim:

.sorted(Comparator.comparing(episodio -> Double.parseDouble(episodio.getAvaliacao())).reversed())

Desta forma, você estaria convertendo a avaliação para um número double antes de fazer a comparação, o que deve resolver o problema.

Sobre a sua segunda dúvida, você também está correto. O Comparator.comparing(DadosEpisodio::avaliacao) está usando o método avaliacao da classe DadosEpisodio para realizar a comparação. Isso é um exemplo do uso de Method References em Java, que é uma forma concisa de expressar uma lambda que chama um método específico. Nesse caso, para cada DadosEpisodio na sua lista, o método avaliacao é chamado e o resultado é usado para a comparação.

Espero ter ajudado e bons estudos!