Comparator Interface এর মাধ্যমে Custom Sorting

Java Technologies - জাভা ইউটিল.প্যাকেজ (Java.util Package) - Comparable এবং Comparator Interface
276

Comparator ইন্টারফেসটি Java Collections Framework এর একটি গুরুত্বপূর্ণ অংশ এবং এটি ব্যবহারকারীদের তাদের নিজস্ব custom sorting লজিক তৈরি করতে সক্ষম করে। এটি সাধারণত ব্যবহার করা হয় যখন আপনি List, Set, Map ইত্যাদির উপাদানগুলোকে নিজস্ব কাস্টম অর্ডারে সাজাতে চান।

Comparator ইন্টারফেসের মাধ্যমে আপনি দুটি অবজেক্টের মধ্যে তুলনা করার জন্য একটি comparison logic সরবরাহ করতে পারেন এবং তারপর সেই তুলনামূলক লজিকের মাধ্যমে উপাদানগুলোকে সাজাতে পারেন। এটি natural ordering এর বাইরে যাওয়ার জন্য ব্যবহৃত হয় এবং যখন আপনার প্রয়োজন হয় তখন কাস্টম নিয়মে সাজানোর সুবিধা প্রদান করে।

Comparator Interface এর বৈশিষ্ট্য:

  1. Custom Sorting Logic: Comparator ইন্টারফেস ব্যবহার করে আপনি আপনার নিজের custom sorting logic তৈরি করতে পারেন, যেমন কোন নির্দিষ্ট ক্ষেত্রের উপর ভিত্তি করে সজ্জিত করা।
  2. Multiple Sorting Criteria: এটি একাধিক criteria বা ফিল্ডের ভিত্তিতে উপাদানগুলোকে সাজাতে সাহায্য করতে পারে।
  3. Reverse Order: আপনি Comparator.reverseOrder() মেথড ব্যবহার করে সহজেই একটি উল্টো (descending) অর্ডারে সাজাতে পারেন।
  4. Non-Destructive: Comparator ইন্টারফেসটি কোনো পরিবর্তন ছাড়া নতুন Comparator তৈরি করে, যার মানে এটি কোনো আসল ডেটা বা অবজেক্টের অবস্থান পরিবর্তন করে না।
  5. Flexible: Comparator ব্যবহার করে আপনি List, Set, Map এবং অন্যান্য কোলেকশনের উপাদানগুলোকে কাস্টমাইজড অর্ডারে সাজাতে পারবেন।

Comparator Interface এর মেথডগুলো:

  • compare(T o1, T o2): দুইটি অবজেক্টের তুলনা করে তাদের মধ্যে পার্থক্য নির্ধারণ করে। যদি প্রথম অবজেক্ট দ্বিতীয়টির চেয়ে ছোট হয় তবে negative value, সমান হলে 0 এবং বড় হলে positive value ফেরত দেয়।
  • reversed(): এটি বর্তমান Comparator এর বিপরীত (reverse) Comparator তৈরি করে।
  • thenComparing(Comparator<? super T> other): এটি প্রথম Comparator এর পরিমাণের সাথে দ্বিতীয় Comparator যোগ করে এবং একটি যৌথ Comparator তৈরি করে।

Comparator Interface ব্যবহার করে Custom Sorting

1. Comparator এর সাথে Custom Sorting উদাহরণ:

ধরা যাক, আমরা একটি Person ক্লাস তৈরি করেছি এবং আমরা তার নাম (name) এবং বয়স (age) এর উপর ভিত্তি করে সাজাতে চাই।

import java.util.*;

class Person {
    String name;
    int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + '}';
    }
}

public class ComparatorExample {
    public static void main(String[] args) {
        // Create a list of people
        List<Person> people = new ArrayList<>();
        people.add(new Person("Alice", 25));
        people.add(new Person("Bob", 20));
        people.add(new Person("Charlie", 30));

        // Sort by age using custom comparator
        people.sort(new Comparator<Person>() {
            @Override
            public int compare(Person p1, Person p2) {
                return Integer.compare(p1.age, p2.age); // Sorting by age
            }
        });

        System.out.println("Sorted by age:");
        for (Person person : people) {
            System.out.println(person);
        }
    }
}

Output:

Sorted by age:
Person{name='Bob', age=20}
Person{name='Alice', age=25}
Person{name='Charlie', age=30}

ব্যাখ্যা:

  • এখানে Comparator ইন্টারফেস ব্যবহার করে Person অবজেক্টগুলোকে age এর উপর ভিত্তি করে সাজানো হয়েছে।
  • compare() মেথডে Integer.compare(p1.age, p2.age) ব্যবহার করা হয়েছে, যা দুইটি বয়সের তুলনা করে তাদের পার্থক্য নির্ধারণ করে।

2. Comparator ব্যবহার করে প্রথম নাম এবং তারপর বয়স অনুযায়ী সজ্জিত করা:

এখন, ধরুন আমরা চাই Person অবজেক্টগুলোকে প্রথমে নাম (name) এবং পরে বয়স (age) অনুযায়ী সাজাতে।

import java.util.*;

class Person {
    String name;
    int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + '}';
    }
}

public class ComparatorExample {
    public static void main(String[] args) {
        // Create a list of people
        List<Person> people = new ArrayList<>();
        people.add(new Person("Alice", 25));
        people.add(new Person("Bob", 20));
        people.add(new Person("Charlie", 30));
        people.add(new Person("Bob", 22));

        // Sorting by name first, then age using custom comparator
        people.sort(Comparator.comparing(Person::getName).thenComparingInt(Person::getAge));

        System.out.println("Sorted by name and then age:");
        for (Person person : people) {
            System.out.println(person);
        }
    }
}

Output:

Sorted by name and then age:
Person{name='Alice', age=25}
Person{name='Bob', age=20}
Person{name='Bob', age=22}
Person{name='Charlie', age=30}

ব্যাখ্যা:

  • Comparator.comparing() মেথডটি প্রথমে নামের (name) উপর সজ্জিত করে, এবং thenComparingInt() মেথডটি বয়সের (age) উপর সজ্জিত করার জন্য ব্যবহার করা হয়েছে।
  • এখানে প্রথমে নামের উপর এবং তারপর বয়সের উপর সজ্জিত করা হয়েছে।

3. Reverse Sorting:

Comparator.reverseOrder() মেথডের মাধ্যমে আপনি রিভার্স অর্ডারে (descending) সাজাতে পারেন।

import java.util.*;

class Person {
    String name;
    int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + '}';
    }
}

public class ReverseSortExample {
    public static void main(String[] args) {
        // Create a list of people
        List<Person> people = new ArrayList<>();
        people.add(new Person("Alice", 25));
        people.add(new Person("Bob", 20));
        people.add(new Person("Charlie", 30));

        // Sort in reverse order based on age using comparator
        people.sort(Comparator.comparingInt(Person::getAge).reversed());

        System.out.println("Sorted by age in reverse order:");
        for (Person person : people) {
            System.out.println(person);
        }
    }
}

Output:

Sorted by age in reverse order:
Person{name='Charlie', age=30}
Person{name='Alice', age=25}
Person{name='Bob', age=20}

ব্যাখ্যা:

  • Comparator.reversed() মেথডটি উল্টো (descending) অর্ডারে সাজানোর জন্য ব্যবহৃত হয়েছে।
  • এখানে age এর উপর ভিত্তি করে উপাদানগুলো উল্টো অর্ডারে সাজানো হয়েছে।

Comparator Interface এর সাথে Custom Sorting এর সুবিধা:

  1. Flexibility in Sorting: Comparator ইন্টারফেস ব্যবহারের মাধ্যমে আপনি custom sorting logic তৈরি করতে পারেন, যা সহজে বিভিন্ন ক্রাইটেরিয়ার উপর ভিত্তি করে সাজাতে সহায়তা করে।
  2. Multiple Criteria Sorting: আপনি একাধিক ক্রাইটেরিয়ার ভিত্তিতে সজ্জিত করতে পারেন, যেমন প্রথমে নাম এবং পরে বয়স, অথবা প্রথমে বয়স এবং পরে নাম ইত্যাদি।
  3. Separation of Concerns: Comparator ইন্টারফেস দিয়ে আপনি সজ্জা বা তুলনা লজিককে আলাদা রাখতে পারেন, যা কোডের রিডেবিলিটি এবং রক্ষণাবেক্ষণ উন্নত করে।
  4. Sorting in Reverse Order: Comparator.reverseOrder() ব্যবহার করে সহজে উল্টো (descending) অর্ডারে সাজানো সম্ভব।

Comparator Interface Java-তে কাস্টম সজ্জা (custom sorting) করতে অত্যন্ত গুরুত্বপূর্ণ। এটি আপনার কাস্টম লজিকের ভিত্তিতে List, Set, Map এবং অন্যান্য কোলেকশনের উপাদানগুলোকে সাজাতে সহায়তা করে। আপনি একাধিক ক্রাইটেরিয়া অনুযায়ী সজ্জিত করতে পারবেন, এবং রিভার্স অর্ডারেও সাজানো সম্ভব। Comparator এর মাধ্যমে আপনি সজ্জা লজিক আলাদা করে, আরও নমনীয় এবং রক্ষণাবেক্ষণযোগ্য কোড তৈরি করতে পারেন।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...