Por favor por que esta pasando esto
episodios.stream()
.filter(t -> t.getEvaluacion()> 9)
.peek(System.out::println)
.collect(Collectors.toSet()).stream()
.findFirst()
Por favor por que esta pasando esto
episodios.stream()
.filter(t -> t.getEvaluacion()> 9)
.peek(System.out::println)
.collect(Collectors.toSet()).stream()
.findFirst()
¡Hola Estudiante, espero que estés bien!
episodios.stream()
: Convierte la lista de episodios en un flujo para aplicar operaciones secuenciales..filter(t -> t.getEvaluacion()> 9)
: Filtra los episodios con una evaluación mayor a 9..peek(System.out::println)
: Imprime cada elemento que pasa el filtro. Aquí está la clave para entender la duplicación..collect(Collectors.toSet())
: Convierte el flujo en un conjunto (Set), eliminando duplicados..stream()
: Convierte nuevamente el conjunto en un flujo..findFirst()
: Obtiene el primer elemento del flujo.println
: El método peek
se ejecuta antes de la operación collect
. Por lo tanto, cada episodio que cumple la condición se imprime una vez.println
: Aunque el conjunto eliminó los duplicados, el método findFirst()
vuelve a convertir el conjunto en un flujo. Al imprimir el primer elemento de este nuevo flujo, se está imprimiendo nuevamente el elemento que ya se había impreso en el peek
.Para evitar la repetición, puedes modificar el código de la siguiente manera:
Optional<Episodio> episodio = episodios.stream()
.filter(t -> t.getEvaluacion()> 9)
.collect(Collectors.toSet())
.stream()
.findFirst();
episodio.ifPresent(System.out::println);
Explicación:
findFirst()
en una variable Optional<Episodio>
.ifPresent
para imprimir el valor solo si está presente, evitando un NullPointerException
en caso de que no se encuentre ningún episodio.Optional
?Optional
y usar get()
. Sin embargo, esto introduce el riesgo de una excepción si no hay elementos.Collectors.toList()
en lugar de Collectors.toSet()
.reduce
, anyMatch
, etc., que podrían ser más adecuados dependiendo de la lógica específica de tu aplicación.En resumen, la repetición se producía debido a la combinación de peek
y findFirst
. Al almacenar el resultado en un Optional
y usar ifPresent
, se garantiza que el episodio se imprima solo una vez y se manejan correctamente los casos en los que no se encuentra ningún elemento.
¿Te gustaría explorar alguna otra parte del código o tienes alguna otra pregunta?
¡Espero haber ayudado y buenos estudios!