मैं एक जावा 8 स्ट्रीम को डुप्लिकेट करना चाहूंगा ताकि मैं इससे दो बार निपट सकूं। मैं 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 -> ... );