我想复制一个Java 8流,以便可以处理两次。我可以collect
列出并从中获得新的信息流;
// doSomething() returns a stream
List<A> thing = doSomething().collect(toList());
thing.stream()... // do stuff
thing.stream()... // do other stuff
但是我认为应该有一种更有效/更优雅的方法。
有没有一种方法可以复制流而不将其转换为集合?
我实际上正在使用Either
s 流,因此想要先处理左侧投影,然后再移至右侧投影并以另一种方式处理。有点像这样(到目前为止,我被迫使用这种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 -> ... );