Ich möchte einen Java 8-Stream duplizieren, damit ich zweimal damit umgehen kann. Ich kann collect
als Liste und neue Streams daraus bekommen;
// doSomething() returns a stream
List<A> thing = doSomething().collect(toList());
thing.stream()... // do stuff
thing.stream()... // do other stuff
Aber ich denke, es sollte einen effizienteren / eleganteren Weg geben.
Gibt es eine Möglichkeit, den Stream zu kopieren, ohne ihn in eine Sammlung umzuwandeln?
Ich arbeite tatsächlich mit einem Stream von Either
s, möchte also die linke Projektion auf eine Weise verarbeiten, bevor ich auf die rechte Projektion übergehe und auf eine andere Weise damit umgehe. Ein bisschen wie dieses (mit dem ich bisher gezwungen bin, den toList
Trick anzuwenden ).
List<Either<Pair<A, Throwable>, A>> results = doSomething().collect(toList());
Stream<Pair<A, Throwable>> failures = results.stream().flatMap(either -> either.left());
failures.forEach(failure -> ... );
Stream<A> successes = results.stream().flatMap(either -> either.right());
successes.forEach(success -> ... );