Chciałbym zduplikować strumień Java 8, abym mógł sobie z tym poradzić dwa razy. Mogę collect
jako listę i uzyskać z tego nowe strumienie;
// doSomething() returns a stream
List<A> thing = doSomething().collect(toList());
thing.stream()... // do stuff
thing.stream()... // do other stuff
Ale wydaje mi się, że powinien być bardziej wydajny / elegancki sposób.
Czy istnieje sposób na skopiowanie strumienia bez przekształcania go w zbiór?
W rzeczywistości pracuję ze strumieniem Either
s, więc chcę przetworzyć lewą projekcję w jeden sposób, zanim przejdę do prawej projekcji i zajmiemy się tym w inny sposób. Coś w tym rodzaju (z którym jak dotąd jestem zmuszony używać toList
sztuczki).
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 -> ... );