Me gustaría duplicar una secuencia de Java 8 para poder lidiar con ella dos veces. Puedo collect
como una lista y obtener nuevas transmisiones de eso;
// doSomething() returns a stream
List<A> thing = doSomething().collect(toList());
thing.stream()... // do stuff
thing.stream()... // do other stuff
Pero creo que debería haber una forma más eficiente / elegante.
¿Existe alguna forma de copiar la secuencia sin convertirla en una colección?
De hecho, estoy trabajando con una secuencia de Either
s, así que quiero procesar la proyección izquierda de una manera antes de pasar a la proyección derecha y tratar con eso de otra manera. Algo así (que, hasta ahora, me veo obligado a usar el toList
truco).
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 -> ... );