Custom Comparators তৈরি করা

Java Technologies - অ্যাপাচি কমন্স কালেকশনস (Apache Common Collection) ComparatorUtils এবং Object Comparison |
135
135

অ্যাপাচি কমন্স কালেকশনস (Apache Commons Collections) লাইব্রেরি Java ডেভেলপারদের জন্য শক্তিশালী ডেটা স্ট্রাকচার এবং ইউটিলিটি ক্লাস সরবরাহ করে, যা ডেটা ম্যানিপুলেশন এবং সংগ্রহ ব্যবস্থাপনা সহজ করে তোলে। এর মধ্যে একটি গুরুত্বপূর্ণ ফিচার হল Custom Comparators, যা আপনাকে ডেটা সেটের উপাদানগুলিকে আপনার নিজস্ব কাস্টম লজিক বা শর্ত অনুযায়ী তুলনা করতে এবং সাজাতে সাহায্য করে।

Comparator একটি ইন্টারফেস যা দুটি অবজেক্টের তুলনা করে, এবং সেই তুলনা অনুযায়ী তাদের অর্ডার নির্ধারণ করে। এটি সাধারণত সজ্জিতকরণ (sorting) বা অনুসন্ধান (searching) প্রক্রিয়ায় ব্যবহৃত হয়।

এই টিউটোরিয়ালে, আমরা আলোচনা করব কিভাবে অ্যাপাচি কমন্স কালেকশনসে Custom Comparators তৈরি করতে হয় এবং এগুলিকে SortedBag, List বা অন্যান্য কালেকশনে ব্যবহার করা যায়।


১. Comparator ইন্টারফেসের ভূমিকা

Comparator ইন্টারফেস Java এর স্ট্যান্ডার্ড API তে একটি ইনটারফেস যা দুটি অবজেক্টের তুলনা করতে ব্যবহৃত হয়। এটি একটি compare() মেথড প্রদান করে, যা দুটি অবজেক্ট গ্রহণ করে এবং একটি পূর্ণসংখ্যা রিটার্ন করে:

  • যদি প্রথম অবজেক্টটি ছোট হয়, তাহলে এটি একটি নেতিবাচক মান রিটার্ন করে।
  • যদি প্রথম অবজেক্টটি বড় হয়, তাহলে এটি একটি ধনাত্মক মান রিটার্ন করে।
  • যদি উভয় অবজেক্ট সমান হয়, তাহলে এটি শূন্য (0) রিটার্ন করে।

Custom Comparators ব্যবহৃত হয় যখন আপনি আপনার নিজস্ব তুলনা শর্ত বা কাস্টম সজ্জিতকরণ লজিক প্রয়োগ করতে চান।


২. Custom Comparator তৈরি করা

অ্যাপাচি কমন্স কালেকশনস লাইব্রেরি ব্যবহার করে Custom Comparator তৈরি করার জন্য প্রথমে একটি Comparator ক্লাস তৈরি করতে হয় যা নির্দিষ্ট শর্ত অনুযায়ী দুটি অবজেক্ট তুলনা করবে।

উদাহরণ: Custom 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 ব্যবহার করা

অ্যাপাচি কমন্স কালেকশনস লাইব্রেরি ComparatorUtils ক্লাস প্রদান করে, যা কিছু সাধারণ তুলনা কার্যাবলী সরবরাহ করে। এটি আপনি যদি সাধারণ তুলনা শর্ত তৈরি করতে চান, যেমন বড়/ছোট, সমান ইত্যাদি, তবে খুবই কার্যকরী।

উদাহরণ: 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 এ Custom Comparator ব্যবহার করা

SortedBag হল একটি বিশেষ ধরনের Bag যা উপাদানগুলিকে সঠিক ক্রমে সজ্জিত রাখে। আপনি Custom Comparator ব্যবহার করে SortedBag এ সজ্জিত করতে পারেন।

উদাহরণ: SortedBag এ Custom Comparator ব্যবহার

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 এর বিভিন্ন ধরনের ব্যবহার

  • শ্রেণীভিত্তিক তুলনা (Class-based comparison): আপনি যদি শ্রেণীভিত্তিক আইটেমগুলির তুলনা করতে চান, যেমন বয়স, নাম, পরিসংখ্যান ইত্যাদি, তবে আপনি Comparator ইন্টারফেস ব্যবহার করতে পারেন।
  • একাধিক শর্তে তুলনা (Chained Comparisons): একাধিক শর্ত (যেমন নাম এবং বয়স) দিয়ে তুলনা করতে পারেন, এবং প্রয়োজনে শর্তগুলিকে চেইন করতে পারেন।
  • Null মানের তুলনা: ComparatorUtils.nullHighComparator() এবং ComparatorUtils.nullLowComparator() ব্যবহার করে আপনি null মানগুলির জন্য বিশেষ আচরণ নির্ধারণ করতে পারেন।

সারাংশ

অ্যাপাচি কমন্স কালেকশনস লাইব্রেরির Custom Comparators আপনাকে ডেটা সেটের উপাদানগুলিকে আপনার নিজস্ব শর্ত বা কাস্টম লজিক অনুযায়ী তুলনা এবং সজ্জিত করতে সহায়তা করে। Comparator ইন্টারফেস ব্যবহার করে আপনি আপনার কাঙ্খিত তুলনা বা সজ্জিতকরণ লজিক প্রয়োগ করতে পারেন। SortedBag, List, এবং অন্যান্য কালেকশনে এই কাস্টম কম্প্যারেটরগুলি ব্যবহার করে আপনি ডেটার শুদ্ধতা, অর্ডার এবং কার্যকারিতা নিশ্চিত করতে পারেন।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion