Oi Bruno! Como vai?
Uma maneira de resolver isso é criando uma classe que contenha tanto os dados do episódio quanto a informação da temporada. Assim, você não perde a referência ao transformar suas listas.
Aqui está uma sugestão de como você pode fazer isso:
- Crie uma nova classe que inclua tanto os dados do episódio quanto a temporada. Por exemplo:
public class EpisodioComTemporada {
private DadosEpisodio episodio;
private int temporada;
public EpisodioComTemporada(DadosEpisodio episodio, int temporada) {
this.episodio = episodio;
this.temporada = temporada;
}
public DadosEpisodio getEpisodio() {
return episodio;
}
public int getTemporada() {
return temporada;
}
@Override
public String toString() {
return "Temporada " + temporada + ": " + episodio.toString();
}
}
- Modifique seu fluxo de
stream para utilizar essa nova classe:
List<EpisodioComTemporada> dadosEpisodios = temporadas.stream()
.flatMap(t -> t.episodios().stream()
.map(e -> new EpisodioComTemporada(e, t.getNumero())))
.collect(Collectors.toList());
System.out.println("\n Top 5 episódios");
dadosEpisodios.stream()
.filter(e -> !e.getEpisodio().avaliacao().equalsIgnoreCase("N/A"))
.sorted(Comparator.comparing(e -> e.getEpisodio().avaliacao(), Comparator.reverseOrder()))
.limit(5)
.forEach(System.out::println);
Com essa abordagem, você mantém a referência da temporada com os dados do episódio, permitindo que você identifique facilmente a qual temporada um episódio pertence ao listar os top 5.
Espero ter ajudado e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.