Ninguna de las opciones es correcta El problema está en que el enunciado pide dos cosas contradictorias:
-Encontrar la primera transacción (findFirst())
-Recolectar todas en un Set (collect(Collectors.toSet()))
Estos son objetivos mutuamente excluyentes. findFirst() es terminal y devuelve un único elemento (Optional), mientras que collect(Collectors.toSet()) recolecta todos los elementos filtrados.
Para hacer ambas cosas, hay que hacer las dos operaciones separadas:
// Para recolectar TODAS en un Set
Set<Transaccion> transaccionesFiltradas = transacciones.stream()
.filter(t -> t.getValor() > 5000)
.peek(System.out::println)
.collect(Collectors.toSet());
// Para encontrar la PRIMERA
Optional<Transaccion> primera = transacciones.stream()
.filter(t -> t.getValor() > 5000)
.findFirst();