কোনও লিগ্যাসি কোডের সাথে আবদ্ধ নয় এমন আমার এপিআই বিকাশ করার সময়, আমি প্রায়শই নিজেকে ফলাফলগুলি সংগ্রহের মাধ্যমে খাঁটি স্ট্রিমের পাইপলাইন খালি স্ট্রিমস পাইপলাইন লেখার পদ্ধতি দেখতে পাই। এটার মত:
ImmutableSet<T> deriveSomethingMeaningfulFromPrivateState() {
return myPrivateThingies.stream()
.map(this::ownerOfThing)
.map(Owner::socialStatus)
.filter(SocialStatus::isHeAFineMatey)
.collect(MyCustomCollectors.toImmutableSet());
}
এখন, এই শ্রেণীর বেশিরভাগ ক্লায়েন্টদের উপাদানগুলি অনুসন্ধান করতে এবং এটির পুনরাবৃত্তি করতে সাধারণত সংগ্রহের প্রয়োজন হয় (এক্ষেত্রে একটি ইমটুটেবলসেট) তবে কিছু ক্লায়েন্ট স্ট্রিম পেয়ে উপকার পেতে পারে যাতে তারা আরও কিছু অপারেশন পাইপ করতে পারে তার উপরে that সংগ্রহ থেকে নতুন স্ট্রিম গ্রহণের প্রয়োজন ছাড়াই স্ট্রিম। সুতরাং একটি স্ট্রিম ফিরিয়ে দেওয়া ক্লায়েন্টদের কাছে তাদের কাছে বিকল্পগুলির একটি দুর্দান্ত সুপারিশ দেয় যদি তাদের কাছে কেবল সংগ্রহ থাকে (সর্বোপরি, তারা সর্বদা collect()
নিজেরাই স্ট্রিমটি রাখতে পারে:
Stream<T> deriveSomethingMeaningfulFromPrivateState() {
return myPrivateThingies.stream()
.map(this::ownerOfthing)
.map(Owner::socialStatus)
.filter(SocialStatus::isHeAFineMatey);
// No collect
}
এই পদ্ধতিরটি আমার জন্য চেষ্টা করার লোভনীয় কারণ আমি এর কোনও সম্ভাব্য ত্রুটি দেখতে পাচ্ছি না। যাইহোক, আমি কোনও লাইব্রেরিতে এই পদ্ধতিটি কখনও দেখিনি (সম্ভবত এটি জাভা 8 এর উপস্থিতির পরে অনেক পাঠাগার প্রকাশিত হয়নি), তাই আমি এটি গ্রহণ করতে কিছুটা ভয় পাচ্ছি। বিদ্যমান লাইব্রেরি ক্লাসগুলি যখন ব্যক্তিগত রাষ্ট্র থেকে কিছু আসে তখন সাধারণত সংগ্রহগুলি ফিরিয়ে দেয়।
আমার প্রাক জাভা -8 স্ব সংগ্রহটি যেদিকেই ফিরিয়ে দেবে যেখানেই আমি যখন কোনও স্ট্রিম ফিরিয়ে দেওয়ার সিদ্ধান্ত নিয়ে নিই তবে কি খারাপ কিছু ঘটতে পারে ? বা সম্ভবত আমি এখানে একটি অ্যান্টিপ্যাটার্নের কিছু করছি যা প্রাইভেট স্টেট থেকে প্রাপ্ত?