我想复制一个 Java8流,这样我就可以处理它两次。我可以 collect
作为一个列表,并从中获得新的流;
// doSomething() returns a stream
List<A> thing = doSomething().collect(toList());
thing.stream()... // do stuff
thing.stream()... // do other stuff
但我觉得应该有更高效更优雅的方法。
有没有办法在不将流转换为集合的情况下复制流?
我实际上是在处理一组 Either
所以我想先用一种方法处理左边的投影然后再用另一种方法处理右边的投影。有点像这样(到目前为止,我不得不使用 toList
技巧)。
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 -> ... );