Java 8-এ Streams API এর মাধ্যমে ডেটা সংগ্রহ করা অত্যন্ত সহজ এবং কার্যকরী হয়েছে। Collectors ক্লাসের বিভিন্ন static method যেমন toList(), toSet(), এবং toMap() ব্যবহার করে আপনি স্ট্রিমের উপাদানগুলিকে বিভিন্ন সংগ্রহ (Collection) ফর্ম্যাটে রূপান্তর করতে পারেন। এটি Java-তে ডেটা সংগ্রহের একটি অত্যন্ত শক্তিশালী এবং সোজা উপায়।
এখানে এই তিনটি পদ্ধতি (method) কীভাবে কাজ করে তা বিস্তারিতভাবে আলোচনা করা হয়েছে।
১. Collectors.toList()
toList() একটি কোলেকশন হিসেবে List রিটার্ন করে যা স্ট্রিমের উপাদানগুলিকে একটি তালিকায় (List) রূপান্তরিত করে। এটি স্ট্রিমের উপাদানগুলোকে ইনসার্ট করার জন্য একটি ArrayList ব্যবহার করে।
Syntax:
List<T> toList()ব্যবহার উদাহরণ:
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> names = Arrays.asList("John", "Jane", "Mike", "Mia");
// Collecting data into a List using toList()
List<String> filteredNames = names.stream()
.filter(name -> name.startsWith("J"))
.collect(Collectors.toList());
System.out.println(filteredNames); // Output: [John, Jane]
}
}এখানে, toList() মেথডটি স্ট্রিমের উপাদানগুলোকে একটি List এ রূপান্তরিত করেছে।
২. Collectors.toSet()
toSet() মেথডটি স্ট্রিমের উপাদানগুলোকে একটি Set কোলেকশনে রূপান্তর করে, যা ডুপ্লিকেট মানগুলোকে সরিয়ে দেয়। এটি স্ট্রিমের উপাদানগুলোকে HashSet বা LinkedHashSet (ভিন্ন ভিন্ন সংস্করণে) এর মধ্যে স্থানান্তরিত করে।
Syntax:
Set<T> toSet()ব্যবহার উদাহরণ:
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> names = Arrays.asList("John", "Jane", "Mike", "Mike", "Mia");
// Collecting data into a Set using toSet()
Set<String> nameSet = names.stream()
.collect(Collectors.toSet());
System.out.println(nameSet); // Output: [Mike, Jane, John, Mia]
}
}এখানে, toSet() মেথডটি একটি Set কোলেকশনে রূপান্তরিত করেছে, যেখানে ডুপ্লিকেট Mike নামটি সরিয়ে ফেলা হয়েছে।
৩. Collectors.toMap()
toMap() মেথডটি স্ট্রিমের উপাদানগুলোকে একটি Map (Key-Value পেয়ার) তে রূপান্তরিত করে। এর জন্য আপনাকে দুটি ফাংশন পাস করতে হবে: একটি Key তৈরি করার জন্য এবং একটি Value তৈরি করার জন্য।
Syntax:
<Map<K, V>> toMap(Function<? super T, ? extends K> keyMapper,
Function<? super T, ? extends V> valueMapper)keyMapper: এটি স্ট্রিমের উপাদান থেকে কী (Key) তৈরি করবে।valueMapper: এটি স্ট্রিমের উপাদান থেকে মান (Value) তৈরি করবে।
ব্যবহার উদাহরণ:
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> names = Arrays.asList("John", "Jane", "Mike", "Mia");
// Collecting data into a Map using toMap()
Map<String, Integer> nameLengthMap = names.stream()
.collect(Collectors.toMap(name -> name, String::length));
System.out.println(nameLengthMap); // Output: {John=4, Jane=4, Mike=4, Mia=3}
}
}এখানে, toMap() মেথডটি স্ট্রিমের প্রতিটি উপাদানকে একটি Map এ রূপান্তরিত করেছে, যেখানে কী হলো নাম এবং মান হলো সেই নামের দৈর্ঘ্য।
৪. toMap() with Duplicate Keys Handling
যখন আপনি toMap() ব্যবহার করেন এবং স্ট্রিমের মধ্যে একাধিক উপাদান একই কী তৈরি করে, তখন একটি কনফ্লিক্ট তৈরি হয়। এই কনফ্লিক্ট সমাধান করার জন্য third parameter হিসেবে একটি merge function ব্যবহার করা যেতে পারে, যা কী-মিল হওয়া ভ্যালুগুলির মধ্যে কীভাবে একত্রিত হবে তা নির্ধারণ করে।
Syntax with merge function:
<Map<K, V>> toMap(Function<? super T, ? extends K> keyMapper,
Function<? super T, ? extends V> valueMapper,
BinaryOperator<V> mergeFunction)ব্যবহার উদাহরণ:
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> names = Arrays.asList("John", "Jane", "Mike", "Mia", "Mia");
// Collecting data into a Map with merge function to handle duplicates
Map<String, String> nameMap = names.stream()
.collect(Collectors.toMap(
name -> name, // keyMapper
name -> name, // valueMapper
(existingValue, newValue) -> existingValue + "," + newValue)); // merge function
System.out.println(nameMap); // Output: {John=John, Jane=Jane, Mike=Mike, Mia=Mia,Mia}
}
}এখানে, toMap() মেথডটি একই কী (Mia) পেলে তাদের মানগুলি একত্রিত করে।
সারসংক্ষেপ
Java 8-এর Collectors ক্লাসের মাধ্যমে স্ট্রিমের উপাদানগুলোকে বিভিন্ন কোলেকশনে রূপান্তর করা খুবই সহজ। toList(), toSet(), এবং toMap() তিনটি সাধারণ এবং গুরুত্বপূর্ণ কোলেকশন রূপান্তর পদ্ধতি:
toList(): স্ট্রিমের উপাদানগুলোকে একটিListতে রূপান্তরিত করে।toSet(): স্ট্রিমের উপাদানগুলোকে একটিSetতে রূপান্তরিত করে, ডুপ্লিকেট মানগুলি সরিয়ে দেয়।toMap(): স্ট্রিমের উপাদানগুলোকে একটিMapতে রূপান্তরিত করে, যেখানে আপনি কী এবং মান নির্ধারণ করতে পারেন।
এগুলি স্ট্রিমের ডেটাকে বিভিন্ন ফরম্যাটে সংগ্রহ করার জন্য শক্তিশালী এবং সহজ পদ্ধতি প্রদান করে।
Read more