คัดลอกสตรีมเพื่อหลีกเลี่ยง "สตรีมได้รับการดำเนินการแล้วหรือปิด"
ฉันต้องการทำสตรีม Java 8 ซ้ำเพื่อที่ฉันจะได้จัดการกับมันสองครั้ง ฉันสามารถcollectเป็นรายการและรับสตรีมใหม่จากสิ่งนั้น // doSomething() returns a stream List<A> thing = doSomething().collect(toList()); thing.stream()... // do stuff thing.stream()... // do other stuff แต่ฉันคิดว่าควรมีวิธีที่มีประสิทธิภาพ / สง่างามกว่านี้ มีวิธีคัดลอกสตรีมโดยไม่เปลี่ยนเป็นคอลเล็กชันหรือไม่? ฉันกำลังทำงานกับสตรีมของEithers จริงๆดังนั้นต้องการประมวลผลการฉายภาพด้านซ้ายทางเดียวก่อนที่จะย้ายไปยังการฉายภาพด้านขวาและจัดการด้วยวิธีอื่น แบบนี้ (ซึ่งจนถึงตอนนี้ฉันบังคับให้ใช้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 …