আমি প্রকল্পের বেশ কয়েকটি ল্যাম্বদা মেলিং তালিকায় তদন্ত করেছি এবং আমার মনে হয় আমি কয়েকটি আকর্ষণীয় আলোচনা পেয়েছি।
আমি এখনও পর্যন্ত সন্তোষজনক ব্যাখ্যা খুঁজে পাই না। এই সমস্ত পড়ার পরে আমি উপসংহারে পৌঁছেছি যে এটি কেবল একটি বাদ ছিল। তবে আপনি এখানে দেখতে পারেন যে এটিপিআইয়ের ডিজাইনের সময় কয়েক বছর ধরে এটি বেশ কয়েকবার আলোচিত হয়েছিল।
ল্যাম্বদা লিবস স্পেশ বিশেষজ্ঞরা
ল্যাম্বডা লিবস স্পেশ বিশেষজ্ঞের মেলিং তালিকায় আমি এই সম্পর্কে একটি আলোচনা পেয়েছি :
Iterable / Iterator.stream এর অধীনে () স্যাম পুল্লারা বলেছেন:
ব্রায়ানের সাথে আমি সীমাবদ্ধতা / সাবস্ট্রিম কার্যকারিতা [1] কীভাবে বাস্তবায়িত হতে পারে তা দেখার জন্য কাজ করছিলাম এবং তিনি পরামর্শ দিলেন যে আইট্রেটারে রূপান্তরকরণ এটির পক্ষে যাওয়ার সঠিক উপায়। আমি এই সমাধানটি সম্পর্কে ভেবেছিলাম কিন্তু পুনরুক্তি করে কোনও স্ট্রিমে পরিণত করার কোনও সুস্পষ্ট উপায় খুঁজে পাইনি। এটি সেখানে অবস্থিত, এটি আপনাকে প্রথমে পুনরুক্তিটি একটি স্প্লিটরেটারে রূপান্তর করতে হবে এবং তারপরে স্প্লিটরেটরকে একটি স্ট্রিমে রূপান্তর করতে হবে। সুতরাং এটি আমার কাছে আবার পর্যালোচনা করে এনেছে যে আমাদের এইগুলিকে আইট্রেবল / আইট্রেটারগুলির মধ্যে সরাসরি বা উভয় বন্ধ করে দেওয়া উচিত কিনা।
আমার পরামর্শটি অন্তত আইট্রেটারে রাখার জন্য যাতে আপনি দুটি বিশ্বের মধ্যে পরিষ্কারভাবে যেতে পারেন এবং এটি করার চেয়ে এটি সহজে আবিষ্কারযোগ্যও হবে:
স্ট্রিমস স্ট্রিম (স্প্লিটেটরস.স্প্লিটেটরঅজ্ঞাত আকার (পুনরুক্তিকারী, স্প্লিটেটর.অর্ডারড))
এবং তারপরে ব্রায়ান গোয়েজ প্রতিক্রিয়া জানিয়েছিলেন :
আমি মনে করি স্যামের বক্তব্যটি ছিল যে প্রচুর গ্রন্থাগার ক্লাস রয়েছে যা আপনাকে একটি আইট্রেটর দেয় তবে অগত্যা আপনাকে নিজের স্প্লিটেরেটর লিখতে দেবেন না। সুতরাং আপনি যা করতে পারেন তা হ'ল কল স্ট্রিম (স্প্লিটেটর ইউনডনসাইজ (রিটারেটর))। স্যাম পরামর্শ দিচ্ছে যে আমরা আপনার জন্য এটি করতে Iterator.stream () সংজ্ঞায়িত করব।
আমি লাইব্রেরি লেখক / উন্নত ব্যবহারকারীদের জন্য স্ট্রিম () এবং স্প্লিটেটর () পদ্ধতিগুলি রাখতে চাই।
এবং পরে
"একজন স্প্লিটেরেটর লেখাকে একজন ইন্টেরেটর লেখার চেয়ে সহজ বলে মনে করা হয়, আমি কেবলমাত্র একজন আইট্রেটারের পরিবর্তে একটি স্প্লিটেরেটর লিখতে পছন্দ করবো (আইট্রেটারটি 90 এর দশকের তাই :)"
যদিও আপনি বিন্দুটি মিস করছেন। এখানে লক্ষ লক্ষ ক্লাস রয়েছে যা ইতিমধ্যে আপনাকে একজন ইট্রেটর সরবরাহ করেছে। এবং তাদের অনেকগুলিই স্প্লিট্রেটার-প্রস্তুত নয়।
লাম্বদা মেলিং তালিকায় পূর্ববর্তী আলোচনা
আপনি যে উত্তরটি সন্ধান করছেন এটি এটি নাও হতে পারে তবে প্রকল্প ল্যাম্বদা মেলিং তালিকায় এটি সংক্ষেপে আলোচনা করা হয়েছিল। সম্ভবত এটি এই বিষয়ে একটি বিস্তৃত আলোচনা জোরদার করতে সহায়তা করে।
ব্রায়ান গয়েটসের কথায় স্ট্রিমস অফ ইটেবারে :
পিছপা...
স্ট্রিম তৈরির অনেকগুলি উপায় রয়েছে। উপাদানগুলি কীভাবে বর্ণনা করতে হবে সে সম্পর্কে আপনার আরও তথ্য, স্ট্রিমের গ্রন্থাগার আপনাকে আরও কার্যকারিতা এবং কার্য সম্পাদন করতে পারে। সর্বাধিক তথ্যের জন্য, তারা হ'ল:
iterator
Iterator + আকার
Spliterator
স্প্লিট্রেটার যা এর আকার জানে
স্প্লিট্রেটার যা এর আকার জানে এবং আরও জানে যে সমস্ত উপ-বিভক্তরা তাদের আকার জানেন।
(কারও কারও অবাক লাগতে পারে যে আমরা যেসব ক্ষেত্রে Q (উপাদান অনুসারে কাজ করা হয়) অনর্থক সে ক্ষেত্রেও বোবা পুনরুক্তিকারীর কাছ থেকে সমান্তরালতা বের করতে পারি))
যদি ইটারেবলের স্ট্রিম () পদ্ধতি থাকে তবে এটি কোনও আকারের কোনও তথ্য ছাড়াই একটি স্প্লিট্রেটারের সাথে একটি আইট্রেটারকে জড়িয়ে রাখবে। তবে সব চেয়ে যে Iterable হয় না আকার তথ্য নেই। যার অর্থ আমরা অভাবের স্ট্রিমগুলি পরিবেশন করছি। এটা এত ভাল না।
স্টিফেন এখানে সংগ্রহের পরিবর্তে ইটেবল গ্রহণ করার বিষয়ে এপিআই অনুশীলনের একটি নিম্নরূপটি হ'ল আপনি "ছোট পাইপ" এর মাধ্যমে জিনিসগুলি জোর করে নিচ্ছেন এবং তাই এটি কার্যকর হতে পারে যখন আকারের তথ্য বর্জন করছেন। আপনি যা করতে যাচ্ছেন সবই যদি তা হয় তবে তা ঠিক আছে, তবে আপনি যদি আরও কিছু করতে চান তবে আপনি চান সমস্ত তথ্য সংরক্ষণ করতে পারলে এটি আরও ভাল।
আইটেবারের দ্বারা সরবরাহ করা ডিফল্টটি সত্যই একটি কৃপণ হবে - যদিও আকারের সংখ্যাগরিষ্ঠ সংখ্যাগুরুরা এই তথ্যটি জানে না যদিও এটি আকার ফেলে দেবে।
দ্বন্দ্ব?
যদিও, দেখে মনে হচ্ছে আলোচনাটি স্ট্রিমসের প্রাথমিক নকশায় প্রাথমিকভাবে পুনরাবৃত্তকারীদের উপর ভিত্তি করে বিশেষজ্ঞ গ্রুপের যে পরিবর্তনগুলির উপর ভিত্তি করে তৈরি হয়েছিল।
তবুও, এটি লক্ষ্য করা আকর্ষণীয় যে সংগ্রহের মতো ইন্টারফেসে স্ট্রিম পদ্ধতিটি এটি হিসাবে সংজ্ঞায়িত করা হয়:
default Stream<E> stream() {
return StreamSupport.stream(spliterator(), false);
}
যা একই আইটেমি ইন্টারফেসে ব্যবহৃত হচ্ছে একই কোড হতে পারে।
সুতরাং, এই কারণেই আমি বলেছিলাম এই উত্তরটি সম্ভবত সন্তোষজনক নয়, তবে এখনও আলোচনার জন্য আকর্ষণীয়।
রিফ্যাক্টরিং এর প্রমাণ
মেলিং তালিকায় বিশ্লেষণ অব্যাহত রেখে মনে হচ্ছে স্প্লিটআইট্রেটার পদ্ধতিটি মূলত সংগ্রহ ইন্টারফেসে ছিল এবং ২০১৩ সালের কোনও এক সময় তারা এটিকে আইটেবারে স্থানান্তরিত করে।
সংগ্রহ থেকে পর্যবেক্ষণযোগ্য পর্যন্ত স্প্লিটআইট্রেটরটি টানুন ।
উপসংহার / তত্ত্ব?
তারপরে সম্ভাবনা রয়েছে যে আইটেবারে পদ্ধতির অভাব কেবল একটি বিস্মরণ, যেহেতু দেখে মনে হচ্ছে যে তারা বিভাজনকারীটিকে সংগ্রহ থেকে আইটেবলে স্থানান্তরিত করার সময় স্ট্রিম পদ্ধতিটিও সরানো উচিত ছিল।
অন্যান্য কারণ থাকলে সেগুলি স্পষ্ট নয়। অন্য কারও তত্ত্ব আছে?