Olá, Gabriel! Tudo bem com você?
Você está correto em afirmar que não podemos realizar duas operações finais no mesmo stream. No entanto, o código da alternativa A não está realizando duas operações finais no mesmo stream.
Aqui está o que está acontecendo na alternativa A:
transacoes.stream()
.filter(t -> t.getValor() > 5000)
.peek(System.out::println)
.collect(Collectors.toSet())
.findFirst();
Primeiro, um stream é criado a partir da lista de transações. Em seguida, esse stream é filtrado para incluir apenas transações com valor superior a 5000. As transações que passam pelo filtro são então impressas no console com o método peek().
A operação final .collect(Collectors.toSet())
é aplicada ao stream, transformando-o em um Set. Observe que, após essa operação, não estamos mais trabalhando com um stream, mas sim com um Set.
Finalmente, o método .findFirst()
é chamado no Set, não no stream. Portanto, não estamos tentando realizar duas operações finais no mesmo stream.
Espero que essa explicação tenha esclarecido suas dúvidas.
Grande abraço e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.