Le agregué la parte donde se puede visualizar:
- La información del mejor o mejores episodios.
- La información del peor o peores episodios.
Map<Integer, Double> evaluacionesTemporada = episodios
.stream()
.filter(e -> e.getEvaluacion() > 0.0)
.collect(Collectors.groupingBy(Episodio::getTemporada, Collectors.averagingDouble(Episodio::getEvaluacion)));
System.out.println(evaluacionesTemporada);
DoubleSummaryStatistics est = episodios
.stream()
.filter(e -> e.getEvaluacion() > 0.0)
.collect(Collectors.summarizingDouble(Episodio::getEvaluacion));
System.out.println("Media de las evaluaciones: " + est.getAverage());
System.out.println("Episodio mejor evaluado: " + est.getMax());
System.out.println("Episodio peor evaluado: " + est.getMin());
List<Episodio> mejoresEpisodio = episodios
.stream()
.filter(e -> e.getEvaluacion() == est.getMax())
.collect(Collectors.toList());
List<Episodio> peoresEpisodio = episodios
.stream()
.filter(e -> e.getEvaluacion() == est.getMin())
.collect(Collectors.toList());
System.out.println("Mejor(es) episodio(s): ");
mejoresEpisodio.forEach(System.out::println);
System.out.println();
System.out.println("Peor(es) episodio(s): ");
peoresEpisodio.forEach(System.out::println);
Si queremos que nos devuelva sólo un título para mejor y peor, le agregamos el .limit(1)
.
List<Episodio> mejoresEpisodio = episodios
.stream()
.filter(e -> e.getEvaluacion() == est.getMax())
.limit(1)
.collect(Collectors.toList());
List<Episodio> peoresEpisodio = episodios
.stream()
.filter(e -> e.getEvaluacion() == est.getMin())
.limit(1)
.collect(Collectors.toList());
Resultado con limite de 1:
Resultado sin límite: