অ্যাপাচি কমন্স কালেকশনস (Apache Commons Collections) লাইব্রেরি Java ডেভেলপারদের জন্য শক্তিশালী ডেটা স্ট্রাকচার এবং ইউটিলিটি ক্লাস সরবরাহ করে, যা ডেটা ম্যানিপুলেশন এবং সংগ্রহ ব্যবস্থাপনা সহজ করে তোলে। এর মধ্যে একটি গুরুত্বপূর্ণ ফিচার হল Custom Comparators, যা আপনাকে ডেটা সেটের উপাদানগুলিকে আপনার নিজস্ব কাস্টম লজিক বা শর্ত অনুযায়ী তুলনা করতে এবং সাজাতে সাহায্য করে।
Comparator একটি ইন্টারফেস যা দুটি অবজেক্টের তুলনা করে, এবং সেই তুলনা অনুযায়ী তাদের অর্ডার নির্ধারণ করে। এটি সাধারণত সজ্জিতকরণ (sorting) বা অনুসন্ধান (searching) প্রক্রিয়ায় ব্যবহৃত হয়।
এই টিউটোরিয়ালে, আমরা আলোচনা করব কিভাবে অ্যাপাচি কমন্স কালেকশনসে Custom Comparators তৈরি করতে হয় এবং এগুলিকে SortedBag, List বা অন্যান্য কালেকশনে ব্যবহার করা যায়।
Comparator ইন্টারফেস Java এর স্ট্যান্ডার্ড API তে একটি ইনটারফেস যা দুটি অবজেক্টের তুলনা করতে ব্যবহৃত হয়। এটি একটি compare()
মেথড প্রদান করে, যা দুটি অবজেক্ট গ্রহণ করে এবং একটি পূর্ণসংখ্যা রিটার্ন করে:
Custom Comparators ব্যবহৃত হয় যখন আপনি আপনার নিজস্ব তুলনা শর্ত বা কাস্টম সজ্জিতকরণ লজিক প্রয়োগ করতে চান।
অ্যাপাচি কমন্স কালেকশনস লাইব্রেরি ব্যবহার করে Custom Comparator তৈরি করার জন্য প্রথমে একটি Comparator ক্লাস তৈরি করতে হয় যা নির্দিষ্ট শর্ত অনুযায়ী দুটি অবজেক্ট তুলনা করবে।
ধরা যাক, আমরা একটি Person
অবজেক্ট তৈরি করেছি এবং চাইছি যে আমরা নামের অর্ডার অনুযায়ী এবং যদি নাম একই হয় তবে বয়সের অর্ডার অনুযায়ী সজ্জিত করতে।
import org.apache.commons.collections4.ComparatorUtils;
import java.util.Comparator;
class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "Person[name=" + name + ", age=" + age + "]";
}
}
public class CustomComparatorExample {
public static void main(String[] args) {
// Create a comparator to compare by name and age
Comparator<Person> nameThenAgeComparator = Comparator
.comparing(Person::getName)
.thenComparing(Person::getAge);
// Create some Person objects
Person person1 = new Person("John", 25);
Person person2 = new Person("Alice", 30);
Person person3 = new Person("John", 20);
// Compare persons using custom comparator
System.out.println(nameThenAgeComparator.compare(person1, person2)); // Output: positive number (John > Alice)
System.out.println(nameThenAgeComparator.compare(person1, person3)); // Output: positive number (John 25 > John 20)
}
}
এখানে:
Comparator.comparing(Person::getName)
ব্যবহার করে প্রথমে name
অনুযায়ী তুলনা করা হয়েছে।thenComparing(Person::getAge)
ব্যবহার করে যদি name
সমান হয়, তাহলে age
অনুসারে দ্বিতীয় তুলনা করা হয়েছে।অ্যাপাচি কমন্স কালেকশনস লাইব্রেরি ComparatorUtils ক্লাস প্রদান করে, যা কিছু সাধারণ তুলনা কার্যাবলী সরবরাহ করে। এটি আপনি যদি সাধারণ তুলনা শর্ত তৈরি করতে চান, যেমন বড়/ছোট, সমান ইত্যাদি, তবে খুবই কার্যকরী।
import org.apache.commons.collections4.ComparatorUtils;
import java.util.Comparator;
public class ComparatorUtilsExample {
public static void main(String[] args) {
// Comparator to compare two integers
Comparator<Integer> comparator = ComparatorUtils.nullHighComparator(Comparator.naturalOrder());
// Compare integers using the comparator
System.out.println(comparator.compare(10, 20)); // Output: -1 (10 < 20)
System.out.println(comparator.compare(20, 10)); // Output: 1 (20 > 10)
System.out.println(comparator.compare(null, 10)); // Output: 1 (null is considered larger)
}
}
এখানে:
ComparatorUtils.nullHighComparator()
ব্যবহার করা হয়েছে যাতে null
মান তুলনা করার সময় এটি সঠিকভাবে কাজ করে (অথবা আপনি চাইলে nullLowComparator()
ব্যবহার করতে পারেন)।Comparator.naturalOrder()
স্বাভাবিক অর্ডারে তুলনা করার জন্য ব্যবহৃত হয়েছে।SortedBag হল একটি বিশেষ ধরনের Bag
যা উপাদানগুলিকে সঠিক ক্রমে সজ্জিত রাখে। আপনি Custom Comparator ব্যবহার করে SortedBag
এ সজ্জিত করতে পারেন।
import org.apache.commons.collections4.SortedBag;
import org.apache.commons.collections4.bag.TreeBag;
import java.util.Comparator;
public class SortedBagExample {
public static void main(String[] args) {
// Create a custom comparator that sorts strings in reverse order
Comparator<String> reverseComparator = Comparator.reverseOrder();
// Create a SortedBag using the custom comparator
SortedBag<String> sortedBag = new TreeBag<>(reverseComparator);
// Add items to the SortedBag
sortedBag.add("apple");
sortedBag.add("banana");
sortedBag.add("cherry");
// Print the SortedBag
System.out.println("Sorted Bag contents: " + sortedBag); // Output: [cherry, banana, apple]
}
}
এখানে:
Comparator.reverseOrder()
ব্যবহার করে স্ট্রিংগুলিকে রিভার্স অর্ডারে সাজানো হয়েছে।TreeBag
ব্যবহার করা হয়েছে যা একটি SortedBag
ইমপ্লিমেন্টেশন, যেখানে reverseComparator
ব্যবহার করে সাজানো হয়েছে।Comparator
ইন্টারফেস ব্যবহার করতে পারেন।ComparatorUtils.nullHighComparator()
এবং ComparatorUtils.nullLowComparator()
ব্যবহার করে আপনি null
মানগুলির জন্য বিশেষ আচরণ নির্ধারণ করতে পারেন।অ্যাপাচি কমন্স কালেকশনস লাইব্রেরির Custom Comparators আপনাকে ডেটা সেটের উপাদানগুলিকে আপনার নিজস্ব শর্ত বা কাস্টম লজিক অনুযায়ী তুলনা এবং সজ্জিত করতে সহায়তা করে। Comparator
ইন্টারফেস ব্যবহার করে আপনি আপনার কাঙ্খিত তুলনা বা সজ্জিতকরণ লজিক প্রয়োগ করতে পারেন। SortedBag, List, এবং অন্যান্য কালেকশনে এই কাস্টম কম্প্যারেটরগুলি ব্যবহার করে আপনি ডেটার শুদ্ধতা, অর্ডার এবং কার্যকারিতা নিশ্চিত করতে পারেন।
common.read_more