Auf Thema antworten

Nein, es ist sogar dokumentiert, ebenso das eine unbehandelte Exception die streamverarbeitende Pipeline beendet. "Terminierende"-Operationen auf einem Stream, also alle Operationen die nicht wieder den Stream zurückliefern, schließen den Stream.

Deshalb können Streams auch nicht rekursiv verwendet werden, sie sind einfach nicht "lazy" im Sinne anderer funktionaler Programmiersprachen. Normalerweise fliegt eine Exception wenn man den Stream derart verwendet.


Hier ein stumpfes konstruiertes Beispiel:


[code=Java]import java.util.stream.Stream;


public class StreamException {

    public static void main(String...args){

        Stream<Integer> integerStream = Stream.of(1,2,3,4,5,6);

        integerStream.allMatch(i -> {integerStream.map(a -> a); return true;});

    }

}

[/code]


Erzeugt normalerweise eine Exception (gekürzt) folgender Art. Wundert mich das du nicht so etwas ähnliches siehst.


[SPOILER=""]Exception in thread "main" java.lang.IllegalStateException: stream has already been operated upon or closed

    at java.util.stream.AbstractPipeline.<init>(AbstractPipeline.java:203)

    at java.util.stream.ReferencePipeline.<init>(ReferencePipeline.java:94)

    at java.util.stream.ReferencePipeline$StatelessOp.<init>(ReferencePipeline.java:618)

    at java.util.stream.ReferencePipeline$3.<init>(ReferencePipeline.java:187)[/SPOILER]



Oben