Apache Commons Collections লাইব্রেরি Comparator সম্পর্কিত কিছু শক্তিশালী ক্লাস এবং ফাংশন সরবরাহ করে যা কোলেকশনগুলির মধ্যে উপাদান তুলনা এবং সাজানো (sorting) সহজ করে তোলে। এর মধ্যে দুটি গুরুত্বপূর্ণ ক্লাস হল ChainedComparator এবং ReverseComparator। এই ক্লাসগুলি Comparator ইন্টারফেসের মাধ্যমে কাস্টম অর্ডারিং এবং তুলনা কৌশল প্রয়োগ করতে সাহায্য করে।
এই নিবন্ধে, আমরা ChainedComparator এবং ReverseComparator এর কার্যকারিতা এবং তাদের ব্যবহার সম্পর্কে বিস্তারিত আলোচনা করব।
১. ChainedComparator কী?
ChainedComparator হল একটি Comparator যা একাধিক Comparator কে একত্রে ব্যবহার করে, অর্থাৎ এটি একাধিক তুলনা ফাংশন (comparators) কে শৃঙ্খলে যুক্ত করে। আপনি যখন একাধিক তুলনা ভিত্তিক সাজানোর প্রয়োজন অনুভব করেন, তখন ChainedComparator একটি কার্যকরী সমাধান। এটি একাধিক Comparator ব্যবহার করে প্রথমে একটি Comparator প্রয়োগ করে, এবং যদি দুটি উপাদান সমান হয়, তখন পরবর্তী Comparator প্রয়োগ করা হয়।
ChainedComparator ব্যবহার করার প্রধান সুবিধা:
- একাধিক Comparator কে একত্রে ব্যবহার করা।
- সাজানোর জন্য কাস্টম অর্ডারিং প্রয়োগ করা, যেখানে প্রথম Comparator যদি দুটি উপাদান সমান না হতে পারে, তখন দ্বিতীয় Comparator প্রয়োগ হবে।
উদাহরণ: ChainedComparator
import org.apache.commons.collections4.ComparatorUtils;
import org.apache.commons.collections4.ComparatorUtils.ChainedComparator;
import java.util.*;
public class ChainedComparatorExample {
public static void main(String[] args) {
// Create a list of objects to be sorted
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("cherry");
list.add("blueberry");
// Create comparators
Comparator<String> lengthComparator = Comparator.comparingInt(String::length);
Comparator<String> alphabetComparator = Comparator.naturalOrder();
// Chain comparators
ChainedComparator<String> chainedComparator = new ChainedComparator<>(lengthComparator, alphabetComparator);
// Sort using ChainedComparator
Collections.sort(list, chainedComparator);
// Print sorted list
System.out.println(list);
}
}
এখানে:
lengthComparatorপ্রথমে String এর দৈর্ঘ্য অনুসারে তুলনা করবে।alphabetComparatorদ্বিতীয় পর্যায়ে আলফাবেটিকাল (অক্ষরগত) তুলনা করবে যদি প্রথম Comparator সমান হয়।
আউটপুট:
[apple, banana, cherry, blueberry]
এখানে প্রথমে শব্দগুলির দৈর্ঘ্য অনুযায়ী সাজানো হয়েছে, এবং যদি দৈর্ঘ্য সমান হয়, তবে আলফাবেটিক সাজানো হয়েছে।
২. ReverseComparator কী?
ReverseComparator হল একটি Comparator যা একটি বিদ্যমান Comparator কে রিভার্স করে (reverse)। এর মানে হল যে, যদি আপনার একটি সাধারণ Comparator থাকে যা ছোট থেকে বড় (ascending order) সাজানো থাকে, তবে ReverseComparator তাকে বড় থেকে ছোট (descending order) সাজানোতে পরিণত করবে। এটি ব্যবহার করে আপনি সহজেই কোন Comparator কে উল্টো সাজানোর জন্য ব্যবহার করতে পারেন।
ReverseComparator ব্যবহার করার প্রধান সুবিধা:
- বিদ্যমান Comparator কে বিপরীত (reverse) সাজানোর জন্য রূপান্তর করা।
উদাহরণ: ReverseComparator
import org.apache.commons.collections4.ComparatorUtils;
import org.apache.commons.collections4.ComparatorUtils.ReverseComparator;
import java.util.*;
public class ReverseComparatorExample {
public static void main(String[] args) {
// Create a list of numbers to be sorted
List<Integer> list = new ArrayList<>();
list.add(3);
list.add(1);
list.add(4);
list.add(2);
// Create a comparator for natural order (ascending)
Comparator<Integer> ascendingComparator = Comparator.naturalOrder();
// Create a ReverseComparator
ReverseComparator<Integer> reverseComparator = new ReverseComparator<>(ascendingComparator);
// Sort using ReverseComparator
Collections.sort(list, reverseComparator);
// Print sorted list
System.out.println(list);
}
}
এখানে:
ascendingComparatorএকটি Comparator যা ছোট থেকে বড় (ascending) সাজানোর জন্য ব্যবহৃত হয়।ReverseComparatorব্যবহার করে আমরা সেই ascendingComparator কে রিভার্স (descending) করে ফেলেছি।
আউটপুট:
[4, 3, 2, 1]
এখানে সংখ্যাগুলি বড় থেকে ছোট (descending) অর্ডারে সাজানো হয়েছে।
৩. ChainedComparator এবং ReverseComparator এর মধ্যে পার্থক্য
- ChainedComparator: একাধিক Comparator কে শৃঙ্খলে যুক্ত করে তুলনা করতে ব্যবহৃত হয়, যেখানে একটি Comparator যদি দুটি উপাদানকে সমান মনে করে, তখন পরবর্তী Comparator প্রয়োগ করা হয়। এটি একাধিক তুলনা কৌশল প্রয়োগ করে।
- ReverseComparator: এটি একটি বিদ্যমান Comparator কে রিভার্স (reverse) করে, যাতে সাধারণ সাজানো (ascending order) পরিবর্তন হয়ে বিপরীত (descending order) হয়ে যায়।
৪. ChainedComparator এবং ReverseComparator এর ব্যবহার কেস
- ChainedComparator: যখন আপনি একাধিক তুলনা (comparisons) প্রয়োগ করতে চান, যেমন প্রথমে একটি শর্তের উপর সাজানো এবং তারপর অন্য একটি শর্তের উপর সাজানো।
- ReverseComparator: যখন আপনি একটি বিদ্যমান Comparator কে শুধুমাত্র উল্টো (reverse) করতে চান, যেমন যেটি সাধারণত ascending order-এ সাজানো থাকে, তাকে descending order-এ সাজাতে চান।
সারাংশ
ChainedComparator এবং ReverseComparator দুটি শক্তিশালী Comparator ক্লাস যা Apache Commons Collections লাইব্রেরির অংশ। ChainedComparator একাধিক Comparator কে একত্রে ব্যবহার করে সাজানো করতে সহায়তা করে, যেখানে ReverseComparator একটি বিদ্যমান Comparator কে রিভার্স করে সাজানোর জন্য ব্যবহৃত হয়। এই দুটি কৌশল Comparator-এর আচরণ কাস্টমাইজ করতে এবং সাজানোর কৌশল উন্নত করতে সহায়ক, যা আপনাকে আরও নমনীয় এবং কার্যকরী সাজানো এবং তুলনা করতে সাহায্য করে।