Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Duvida sobre sintaxe Java

Alguem sabe dizer porque o codigo escrito da forma abaixo compila mas apresenta exception na execucao:

            Stream<Curso> streamDeCurso = cursos.stream();
        streamDeCurso.filter(c -> c.getAlunos() > 100);
        streamDeCurso.forEach(c -> System.out.println(c.getNome()));

Exception in thread "main" java.lang.IllegalStateException: stream has already been operated upon or closed at java.base/java.util.stream.AbstractPipeline.sourceStageSpliterator(AbstractPipeline.java:279) at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658) at TestaCurso.main(TestaCurso.java:21)

1 resposta
solução!

Vitor,

O erro ocorre pois quando você fez o filter no stream você começou a operá-lo e depois tentou iniciar novamente o processo no forEach.

Você não precisa atribuir o stream a uma variável, pode ser feito direto:

cursos.stream()
       .filter(c -> c.getAlunos() > 100);
       .forEach(c -> System.out.println(c.getNome()));

Outro exemplo:

       //Mostrando carros que começam com a letra C
        List<String> carros = List.of("Prius", "Corolla", "Civic", "Celta", "Fusca");

        carros.stream()
              .filter(c -> c.startsWith("C"))
              .forEach(c -> System.out.println(c));