আমি একটি জাভা 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 -> ... );