Saya ingin menduplikasi aliran Java 8 sehingga saya bisa mengatasinya dua kali. Saya bisa collectsebagai daftar dan mendapatkan aliran baru dari itu;
// doSomething() returns a stream
List<A> thing = doSomething().collect(toList());
thing.stream()... // do stuff
thing.stream()... // do other stuff
Tapi menurut saya harus ada cara yang lebih efisien / elegan.
Adakah cara untuk menyalin aliran tanpa mengubahnya menjadi koleksi?
Saya sebenarnya bekerja dengan aliran Eithers, jadi ingin memproses proyeksi kiri dengan satu cara sebelum beralih ke proyeksi kanan dan menangani dengan cara lain. Jenis seperti ini (yang, sejauh ini, saya terpaksa menggunakan toListtrik dengan).
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 -> ... );