두 번 처리 할 수 있도록 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 -> ... );