1. উপাদান সংগ্রহ

Streamঅবশেষে, আমরা ক্লাসের সবচেয়ে আকর্ষণীয় পদ্ধতি, পদ্ধতিতে পৌঁছেছি collect()List<T>এটি স্ট্রীম থেকে আমাদের পরিচিত সংগ্রহ — , Set<T>, Map<T, R>এবং অন্যান্যগুলিতে যেতে ব্যবহৃত হয় ।

পদ্ধতিটি একটি আর্গুমেন্ট হিসাবে collect()একটি বিশেষ বস্তু নেয় । collectorএই বস্তুটি স্ট্রীম থেকে সমস্ত ডেটা পড়ে, এটিকে একটি নির্দিষ্ট ধরণের সংগ্রহে রূপান্তর করে এবং এটি ফেরত দেয়। এবং তারপর সংগ্রহ পদ্ধতি নিজেই এই সংগ্রহ ফেরত.

এই সব একটি বরং চটকদার পদ্ধতিতে করা হয়: collectorবস্তুর ধরন হল Collector<T, A, R>. আপনি দেখতে পাচ্ছেন, এটির তিনটি ধরণের পরামিতি রয়েছে। শেষ টাইপ প্যারামিটার ( R) সাধারণত একটি টাইপ হয় List<T>collect()এর মানে হল কম্পাইলার এই টাইপটি ব্যবহার করে পদ্ধতির জন্য সঠিক রিটার্ন টাইপ নির্ধারণ করতে পারে ।

আমি আশা করি আপনি খুব বিভ্রান্ত না. যাই হোক না কেন, আপনাকে নিজেই কালেক্টর অবজেক্ট তৈরি করতে হবে না। ক্লাসের স্থির পদ্ধতি দ্বারা প্রত্যাবর্তনকৃত রেডিমেড বস্তুই Collectorsযথেষ্ট হবে।

কালেক্টর ক্লাস

ক্লাসে Collectorsবেশ কিছু স্ট্যাটিক পদ্ধতি রয়েছে যা রেডিমেড সংগ্রাহক বস্তু ফেরত দেয় — প্রতিটি অনুষ্ঠানের জন্য কিছু। এখানে আমরা সবচেয়ে গুরুত্বপূর্ণ বিবেচনা করব।

toList()
একটি বস্তু যা একটি স্ট্রীমকে একটি তালিকায় রূপান্তর করে ( List<T>)
toSet()
একটি বস্তু যা একটি স্ট্রীমকে একটি সেটে রূপান্তর করে ( Set<T>)
toMap()
একটি বস্তু যা একটি স্ট্রীমকে একটি মানচিত্রে রূপান্তর করে( Map<K, V>)
joining()
একটি স্ট্রিমের উপাদানগুলিকে একটি একক স্ট্রিংয়ে সংযুক্ত করে৷
mapping()
একটি স্ট্রিং এর উপাদান a এ রূপান্তর করেMap<K, V>
groupingBy()
উপাদানগুলিকে গ্রুপ করে এবং রিটার্ন করেMap<K, V>

2. একটি স্ট্রীমকে একটি তালিকায় রূপান্তর করা

নিম্নলিখিতটি একটি স্ট্রিমের সাথে কাজ করার এবং ফলাফলটিকে একটি তালিকায় রূপান্তর করার একটি সাধারণ উদাহরণ

ArrayList<String> list = new ArrayList<String>();
Collections.addAll(list, "Hello", "how's", "life?");

List<String> result = list.stream()
   .filter( s -> Character.isUpperCase(s.charAt(0)) )
   .collect( Collectors.toList() );

আমরা সংগ্রহ থেকে একটি প্রবাহ পেয়েছিলাম. তারপরে আমরা শুধুমাত্র স্ট্রিংগুলি ধরে রেখে একটি নতুন স্ট্রিম পেয়েছি যার প্রথম অক্ষর বড় হাতের। তারপর সেই স্ট্রিম থেকে সমস্ত ডেটা একটি সংগ্রহে সংগ্রহ করা হয়, যা ফেরত দেওয়া হয়।



3. একটি স্ট্রীমকে একটি সেটে রূপান্তর করা

নীচে একটি স্ট্রিমের সাথে কাজ করার এবং ফলাফলটিকে একটি সেটে রূপান্তর করার একটি সাধারণ উদাহরণ

ArrayList<String> list = new ArrayList<String>();
Collections.addAll(list, "Hello", "how's", "life?");

Set<String> result = list.stream()
   .filter( s -> Character.isUpperCase(s.charAt(0)) )
   .collect( Collectors.toSet() );

সবকিছুই একটি স্ট্রীমকে একটি তে রূপান্তর করার জন্য কোডের সাথে খুব মিল List, শুধুমাত্র আমরা একটি ভিন্ন সংগ্রাহক বস্তু ব্যবহার করি, যা toSet()পদ্ধতি দ্বারা ফিরে আসে।



4. একটি স্ট্রীমকে একটি মানচিত্রে রূপান্তর করা

কিন্তু একটি স্ট্রীমকে একটি মানচিত্রে রূপান্তর করা একটু বেশি কঠিন। একটি মানচিত্রের প্রতিটি এন্ট্রি দুটি উপাদান নিয়ে গঠিত: একটি কী এবং একটি মান৷ আমরা স্ট্রীমের প্রতিটি উপাদানের জন্য কী এবং মান কীভাবে সংজ্ঞায়িত করব তা বের করতে হবে।

উদাহরণ:

ArrayList<String> list = new ArrayList<String>();
Collections.addAll(list, "a=2", "b=3", "c=4", "d==3");

Map<String, String> result = list.stream()
   .map( e -> e.split("=") )
   .filter( e -> e.length == 2 )
   .collect( Collectors.toMap(e -> e[0], e -> e[1]) );

এখানে কি ঘটছে তা একবার দেখে নেওয়া যাক।

প্রথম লাইনে, আমরা map(...)প্রতিটি স্ট্রিংকে স্ট্রিংয়ের অ্যারেতে রূপান্তর করতে ব্যবহার করি। বিভক্ত পদ্ধতি ব্যবহার করে, আমরা প্রতিটি স্ট্রিংকে দুটি ভাগে বিভক্ত করি।

দ্বিতীয় লাইনে, আমরা পদ্ধতিতে পাস করি filter()শুধুমাত্র সেই অ্যারে যেগুলোতে ঠিক দুটি উপাদান রয়েছে। স্ট্রিংটি d==3তিনটি উপাদানের একটি অ্যারেতে বিভক্ত হয়ে যায়, যা ফিল্টারের সাথে মেলে না।

এবং অবশেষে, শেষ লাইনে, আমরা স্ট্রিমটিকে একটি তে রূপান্তর করি Map<String, String>। পদ্ধতিতে দুটি ফাংশন পাস করা হয় toMap()। স্ট্রীমের প্রতিটি উপাদানের জন্য, প্রথম ফাংশনটি কী ফেরত দেবে , এবং দ্বিতীয়টি মান প্রদান করবে

প্রতিটি অ্যারের প্রথম উপাদান ("a", "b", "c") হবে আমাদের কী, এবং প্রতিটি অ্যারের দ্বিতীয় উপাদান ("2", "3", "4") হবে আমাদের মান।



5. একটি স্ট্রিম একটি স্ট্রিং রূপান্তর

আরেকটি আকর্ষণীয় সংগ্রাহক বস্তু দ্বারা ফেরত দেওয়া হয় Collectors.joining()। এটি একটি স্ট্রিমের সমস্ত উপাদানকে রূপান্তর করে Stringএবং সেগুলিকে একটি একক স্ট্রিংয়ে সংযুক্ত করে। উদাহরণ

ArrayList<String> list = new ArrayList<String>();
Collections.addAll(list, "a=2", "b=3", "c=4", "d==3");
String result = list.stream().collect( Collectors.joining(", ") );