Me gustaría duplicar una secuencia de Java 8 para poder lidiar con ella dos veces. Puedo collectcomo 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 Eithers, 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 toListtruco).
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 -> ... );