Skill

Ordering এবং Comparators

Java Technologies - গুয়াভা (Guava)
317

Guava লাইব্রেরি জাভাতে কাস্টম এবং জেনেরিক কম্পেয়ারসন (comparison) পরিচালনা করার জন্য বেশ কিছু শক্তিশালী ইউটিলিটি সরবরাহ করে। এর মধ্যে প্রধান দুটি ক্লাস হলো Ordering এবং Comparators। এগুলি আপনাকে সিস্টেমে কাস্টম অর্ডারিং (sorting) বাস্তবায়ন এবং কমপ্লেক্স ডেটা টাইপসের সাথে কাজ করার ক্ষেত্রে সহায়তা করে।

Ordering ব্যবহার


Ordering ক্লাস Guava-তে একটি অত্যন্ত শক্তিশালী এবং নমনীয় টুল, যা আপনাকে কাস্টম অর্ডারিং (sorting) বা তুলনা (comparison) পরিচালনা করতে সহায়তা করে। এটি Java এর স্ট্যান্ডার্ড Comparator ইন্টারফেসের একটি উন্নত সংস্করণ হিসেবে কাজ করে।

Best Practice:

  • Ordering ব্যবহার করে একাধিক ক্ষেত্রের উপর ভিত্তি করে ডেটা সাজানো বা তুলনা করা সহজ হয়।
  • এটি ম্যানুয়ালি Comparator ব্যবহার করার তুলনায় অনেক বেশি কার্যকরী এবং পরিষ্কার।

উদাহরণ

import com.google.common.collect.Ordering;

import java.util.List;
import java.util.Arrays;

public class OrderingExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(5, 2, 8, 3, 7);

        // Ascending order ব্যবহার করে অর্ডারিং করা
        Ordering<Integer> ordering = Ordering.natural();
        List<Integer> sortedNumbers = ordering.sortedCopy(numbers);
        System.out.println(sortedNumbers);  // Output: [2, 3, 5, 7, 8]

        // Descending order ব্যবহার করে অর্ডারিং করা
        Ordering<Integer> descendingOrder = ordering.reverse();
        List<Integer> descendingSorted = descendingOrder.sortedCopy(numbers);
        System.out.println(descendingSorted);  // Output: [8, 7, 5, 3, 2]
    }
}

এখানে, Ordering.natural() ব্যবহার করে প্রাকৃতিক ক্রমে (ascending) সংখ্যা সাজানো হয়েছে, এবং reverse() ব্যবহার করে উল্টো ক্রম (descending) সাজানো হয়েছে।

Comparators ব্যবহার


Comparators Guava-তে Comparator এর একটি সহজ ও কার্যকরী সংস্করণ সরবরাহ করে। এটি জাভার সাধারণ Comparator এর মতোই কাজ করে, কিন্তু Guava-তে এটি আরও পরিষ্কার ও ব্যবহারযোগ্য।

Best Practice:

  • Comparators ব্যবহার করে কাস্টম ক্রমবিন্যাস (sorting) তৈরি করতে পারবেন।
  • Guava-এর Ordering ক্লাসের সাথে সহজে কম্পেয়ারটর ব্যবহার করে একাধিক ক্ষেত্রের ভিত্তিতে তুলনা বা সাজানো সম্ভব।

উদাহরণ

import com.google.common.collect.Comparators;
import com.google.common.collect.Ordering;

import java.util.List;
import java.util.Arrays;

public class ComparatorsExample {
    public static void main(String[] args) {
        List<String> words = Arrays.asList("apple", "banana", "cherry", "date");

        // কাস্টম কম্পেয়ারটর ব্যবহার করে সাজানো
        List<String> sortedWords = Ordering.from(Comparators.reverseOrder()).sortedCopy(words);
        System.out.println(sortedWords);  // Output: [date, cherry, banana, apple]
    }
}

এখানে, Comparators.reverseOrder() ব্যবহার করে আমরা শব্দগুলিকে উল্টো ক্রমে সাজিয়েছি।

Ordering এবং Comparators একত্রিত ব্যবহার


Guava এর Ordering এবং Comparators ক্লাসগুলি একসাথে ব্যবহার করে আপনি কাস্টম অর্ডারিং এবং কম্পেয়ারসনকে আরও শক্তিশালী এবং নমনীয়ভাবে পরিচালনা করতে পারেন। এগুলোর মাধ্যমে আপনি একাধিক শর্তে সাজানো বা তুলনা করতে সক্ষম হবেন।

উদাহরণ

import com.google.common.collect.Ordering;
import com.google.common.collect.Comparators;

import java.util.List;
import java.util.Arrays;

public class OrderingComparatorsExample {
    public static void main(String[] args) {
        List<String> words = Arrays.asList("apple", "banana", "cherry", "date");

        // প্রথমে আক্ষরিক অর্ডারে সাজানো এবং তারপর আকারের ভিত্তিতে সাজানো
        Ordering<String> ordering = Ordering.natural().compound(Comparators.comparingInt(String::length));
        List<String> sortedWords = ordering.sortedCopy(words);
        System.out.println(sortedWords);  // Output: [apple, date, banana, cherry]
    }
}

এখানে, compound() মেথড ব্যবহার করে আমরা দুটি কম্পেয়ারটর একত্রিত করেছি। প্রথমে স্ট্রিংগুলিকে আক্ষরিকভাবে সাজানো হয়েছে, এবং পরে তাদের দৈর্ঘ্যের ভিত্তিতে সাজানো হয়েছে।

Ordering এবং Comparators এর সুবিধা


  1. সহজ কাস্টম অর্ডারিং: Guava-এর Ordering এবং Comparators ক্লাস ব্যবহার করে আপনি সহজেই কাস্টম অর্ডারিং বা তুলনা বাস্তবায়ন করতে পারেন।
  2. Multiple Criteria Sorting: আপনি একাধিক ক্রাইটেরিয়া বা শর্তের ভিত্তিতে ডেটা সাজাতে পারেন, যেমন নাম, বয়স, বা কোনো অন্যান্য প্রপার্টি।
  3. ক্লিন কোড: Guava-তে ব্যবহৃত Ordering এবং Comparators ক্লাসগুলি Comparator ইন্টারফেসের তুলনায় অনেক পরিষ্কার ও আরও ব্যবহারের উপযোগী।
  4. গতি এবং দক্ষতা: এই ক্লাসগুলির ব্যবহার ডেটা অপারেশনের গতিকে বৃদ্ধি করে এবং আরো সহজ কোডিং সুবিধা দেয়।

সারাংশ

Guava লাইব্রেরির Ordering এবং Comparators ক্লাসগুলি জাভাতে কাস্টম অর্ডারিং এবং তুলনা পরিচালনা করতে শক্তিশালী এবং সহজ টুল সরবরাহ করে। এগুলি ব্যবহার করে আপনি কমপ্লেক্স ডেটা টাইপসের মধ্যে কার্যকরীভাবে সাজানো এবং তুলনা করতে পারবেন। Guava-এর এই ক্লাসগুলি সাধারণ Comparator ব্যবহার করার তুলনায় আরও পরিষ্কার, শক্তিশালী, এবং নমনীয় কাজ প্রদান করে।

Content added By

Ordering এর ধারণা এবং Guava Ordering Class

274

Guava লাইব্রেরিতে Ordering একটি শক্তিশালী ক্লাস যা ডেটা কম্প্যারিজন এবং সাজানোর কাজ সহজ করে তোলে। সাধারণ Java-তে Comparator ব্যবহার করে তুলনা এবং সাজানোর কাজ করা হয়, তবে Guava এর Ordering ক্লাসের সাহায্যে আপনি আরও শক্তিশালী এবং সহজ উপায়ে এই কাজগুলো করতে পারেন।

Ordering এর ধারণা

Ordering হল Guava লাইব্রেরির একটি বিশেষ ক্লাস যা জেনেরিক টাইপের তালিকা বা সেটের উপাদান সাজানোর জন্য ব্যবহৃত হয়। এটি ডেটার কম্প্যারিজন, ইনভার্স অর্ডারিং, এবং কমপোজড অর্ডারিংয়ের মতো বিভিন্ন সুবিধা প্রদান করে। Guava এর Ordering ক্লাসের সাহায্যে আপনি কাস্টম অর্ডারিং পদ্ধতি তৈরি করতে পারেন, যা সাধারণ Java Comparator-এর চেয়ে অনেক বেশি কার্যকর এবং সুবিধাজনক।

Guava Ordering Class এর বৈশিষ্ট্য

Ordering ক্লাসের কিছু প্রধান বৈশিষ্ট্য:

  1. Natural Ordering: এটি উপাদানগুলোকে তাদের স্বাভাবিক (natural) অর্ডারে সাজায়, যেমন সংখ্যা বা স্ট্রিং সাজানো।
  2. Custom Ordering: আপনি কাস্টম কম্প্যারিজন লজিক তৈরি করতে পারেন এবং সেটি দিয়ে সাজানোর কাজ করতে পারেন।
  3. Inverse Ordering: উল্টো (reverse) অর্ডারিং সম্পাদন করতে পারেন, অর্থাৎ কম্প্যারিজন ফলাফল উল্টো করে সাজানো।
  4. Compound Ordering: একাধিক কম্প্যারিজন স্টেপ একত্রে ব্যবহার করা যায়।

Guava Ordering Class এর ব্যবহার

1. Natural Ordering (প্রাকৃতিক অর্ডারিং)

Guava লাইব্রেরির Ordering.natural() মেথড দিয়ে আপনি প্রাকৃতিক অর্ডারিং ব্যবহার করতে পারেন, যা স্ট্রিং, সংখ্যা ইত্যাদি সাধারণ অর্ডারিংয়ের জন্য উপযুক্ত।

import com.google.common.collect.Ordering;

import java.util.Arrays;
import java.util.List;

public class NaturalOrderingExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(5, 2, 9, 1, 3);
        
        // প্রাকৃতিক অর্ডারিং ব্যবহার করা
        List<Integer> sortedNumbers = Ordering.natural().sortedCopy(numbers);
        
        System.out.println("Sorted Numbers: " + sortedNumbers);
    }
}

আউটপুট:

Sorted Numbers: [1, 2, 3, 5, 9]

এখানে, Ordering.natural() মেথডটি ব্যবহার করে আমরা সিস্টেমের প্রাকৃতিক অর্ডার (যেমন ছোট থেকে বড় সংখ্যা) অনুযায়ী ডেটা সাজিয়েছি।

2. Custom Ordering (কাস্টম অর্ডারিং)

এছাড়া, আপনি কাস্টম অর্ডারিংও করতে পারেন। উদাহরণস্বরূপ, আপনি একটি স্ট্রিং তালিকা সাজাতে চাইছেন যেখানে ডেটার দৈর্ঘ্য অনুযায়ী সাজানো হবে।

import com.google.common.collect.Ordering;
import java.util.Arrays;
import java.util.List;

public class CustomOrderingExample {
    public static void main(String[] args) {
        List<String> words = Arrays.asList("banana", "apple", "pear", "kiwi");

        // কাস্টম অর্ডারিং (স্ট্রিং দৈর্ঘ্য অনুসারে সাজানো)
        List<String> sortedWords = Ordering.natural().onResultOf(String::length).sortedCopy(words);
        
        System.out.println("Sorted Words by Length: " + sortedWords);
    }
}

আউটপুট:

Sorted Words by Length: [kiwi, pear, apple, banana]

এখানে onResultOf(String::length) ব্যবহার করে আমরা স্ট্রিংয়ের দৈর্ঘ্য অনুযায়ী ডেটা সাজিয়েছি।

3. Inverse Ordering (উল্টো অর্ডারিং)

Guava Ordering ক্লাসের মাধ্যমে আপনি উল্টো (reverse) অর্ডারিংও করতে পারেন। এটি করতে reverse() মেথড ব্যবহার করা হয়।

import com.google.common.collect.Ordering;

import java.util.Arrays;
import java.util.List;

public class InverseOrderingExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(5, 2, 9, 1, 3);
        
        // উল্টো অর্ডারিং
        List<Integer> reversedNumbers = Ordering.natural().reverse().sortedCopy(numbers);
        
        System.out.println("Reversed Sorted Numbers: " + reversedNumbers);
    }
}

আউটপুট:

Reversed Sorted Numbers: [9, 5, 3, 2, 1]

এখানে reverse() মেথড ব্যবহার করে আমরা সংখ্যাগুলো উল্টোভাবে সাজিয়েছি, অর্থাৎ বড় থেকে ছোট।

4. Compound Ordering (একাধিক অর্ডারিং)

Guava এর compound() মেথডের মাধ্যমে আপনি একাধিক অর্ডারিং লজিক একত্রে ব্যবহার করতে পারেন। উদাহরণস্বরূপ, যদি আপনি প্রথমে স্ট্রিংয়ের দৈর্ঘ্য অনুযায়ী সাজাতে চান এবং তারপর একে আলফাবেটিক্যাল অর্ডারেও সাজাতে চান, তবে আপনি দুটি অর্ডারিং একসাথে ব্যবহার করতে পারেন।

import com.google.common.collect.Ordering;

import java.util.Arrays;
import java.util.List;

public class CompoundOrderingExample {
    public static void main(String[] args) {
        List<String> words = Arrays.asList("banana", "apple", "pear", "kiwi", "mango");

        // প্রথমে দৈর্ঘ্য অনুযায়ী এবং তারপর আলফাবেটিক্যাল অনুযায়ী সাজানো
        List<String> sortedWords = Ordering.natural()
            .onResultOf(String::length)
            .compound(Ordering.natural())
            .sortedCopy(words);
        
        System.out.println("Compound Sorted Words: " + sortedWords);
    }
}

আউটপুট:

Compound Sorted Words: [kiwi, pear, apple, mango, banana]

এখানে, প্রথমে স্ট্রিংয়ের দৈর্ঘ্য অনুযায়ী সাজানো হয়েছে, এবং তারপরে একে আলফাবেটিক্যাল অর্ডারে সাজানো হয়েছে।


সারাংশ

Guava এর Ordering ক্লাস হল একটি শক্তিশালী টুল যা ডেটা সাজানোর কাজ সহজ করে তোলে। এটি natural ordering, custom ordering, inverse ordering, এবং compound ordering সমর্থন করে, যা সাধারণ Java কম্প্যারেটর থেকেও বেশি সুবিধাজনক এবং শক্তিশালী। Guava Ordering ক্লাস ব্যবহারের মাধ্যমে আপনি ডেটা সাজানোর কাজ আরও দ্রুত, সহজ এবং আরও কার্যকরীভাবে করতে পারেন।


Content added By

Natural Ordering, Reverse Ordering এবং Custom Ordering

302

গুয়াভা (Guava) লাইব্রেরি জাভা প্রোগ্রামিংয়ে ডেটা পরিচালনা সহজ এবং আরও কার্যকরী করে তোলে। এর মধ্যে Ordering ক্লাসটি বিশেষভাবে উপকারী, যা আপনাকে কাস্টম এবং ডিফল্ট অর্ডারিং কৌশল ব্যবহার করার সুবিধা দেয়। Ordering মূলত ডেটা অর্ডারিংয়ের জন্য একটি শক্তিশালী ইন্টারফেস, যা ন্যাচারাল অর্ডারিং, রিভার্স অর্ডারিং, এবং কাস্টম অর্ডারিং সমর্থন করে।


Natural Ordering

ন্যাচারাল অর্ডারিং (Natural Ordering) হল ডেটার নিজস্ব অর্ডারিং, যা সাধারণত Comparable ইন্টারফেসের মাধ্যমে নির্ধারিত হয়। এটি কোনো ডেটা টাইপের প্রাক-নির্ধারিত অর্ডার অনুসরণ করে, যেমন সংখ্যার জন্য ক্রমাগত বড় থেকে ছোট বা ছোট থেকে বড় অর্ডার।

উদাহরণ:

import com.google.common.collect.Ordering;
import java.util.List;
import com.google.common.collect.Lists;

public class NaturalOrderingExample {
    public static void main(String[] args) {
        List<Integer> numbers = Lists.newArrayList(5, 3, 8, 1, 2);

        // Natural Ordering ব্যবহার করে সংখ্যাগুলিকে সাজানো
        Ordering<Integer> naturalOrdering = Ordering.natural();
        List<Integer> sortedNumbers = naturalOrdering.sortedCopy(numbers);

        System.out.println("Sorted numbers in natural order: " + sortedNumbers);
    }
}

এখানে Ordering.natural() ব্যবহৃত হয়েছে, যা ডিফল্টভাবে সংখ্যাগুলিকে ছোট থেকে বড় অর্ডারে সাজাবে। ফলে আউটপুট হবে:

Sorted numbers in natural order: [1, 2, 3, 5, 8]

Reverse Ordering

রিভার্স অর্ডারিং (Reverse Ordering) হল ডেটার বিপরীত অর্ডার। এর মাধ্যমে আপনি ডেটাকে তার ন্যাচারাল অর্ডারের বিপরীতে সাজাতে পারেন। গুয়াভা লাইব্রেরি Ordering.natural().reverse() মেথডের মাধ্যমে এটি সহজে করতে দেয়।

উদাহরণ:

import com.google.common.collect.Ordering;
import java.util.List;
import com.google.common.collect.Lists;

public class ReverseOrderingExample {
    public static void main(String[] args) {
        List<Integer> numbers = Lists.newArrayList(5, 3, 8, 1, 2);

        // Reverse Ordering ব্যবহার করে সংখ্যাগুলিকে সাজানো
        Ordering<Integer> reverseOrdering = Ordering.natural().reverse();
        List<Integer> sortedNumbers = reverseOrdering.sortedCopy(numbers);

        System.out.println("Sorted numbers in reverse order: " + sortedNumbers);
    }
}

এখানে Ordering.natural().reverse() ব্যবহৃত হয়েছে, যার ফলে সংখ্যাগুলো বড় থেকে ছোট অর্ডারে সাজানো হবে। আউটপুট হবে:

Sorted numbers in reverse order: [8, 5, 3, 2, 1]

Custom Ordering

কাস্টম অর্ডারিং (Custom Ordering) হল যখন আপনি আপনার নিজস্ব কাস্টম ক্রাইটেরিয়া অনুসারে ডেটা সাজানোর সিদ্ধান্ত নেন। এটি Ordering.from() বা Ordering.by() মেথড ব্যবহার করে করা যেতে পারে, যেখানে আপনি কাস্টম কম্প্যারেটর প্রদান করেন।

উদাহরণ:

import com.google.common.collect.Ordering;
import java.util.List;
import com.google.common.collect.Lists;
import java.util.Comparator;

public class CustomOrderingExample {
    public static void main(String[] args) {
        List<String> names = Lists.newArrayList("John", "Alice", "Bob", "Charlie");

        // Custom Ordering ব্যবহার করে আন্ডারস্কোর (এবং ছোট হাতের অক্ষরের উপর ভিত্তি করে) দিয়ে সাজানো
        Ordering<String> customOrdering = Ordering.from(Comparator.comparing(String::length));
        List<String> sortedNames = customOrdering.sortedCopy(names);

        System.out.println("Sorted names by length: " + sortedNames);
    }
}

এখানে, আমরা নামগুলিকে তাদের দৈর্ঘ্য অনুযায়ী সাজিয়েছি। আউটপুট হবে:

Sorted names by length: [Bob, John, Alice, Charlie]

এখানে আমরা Comparator.comparing(String::length) ব্যবহার করেছি, যা নামগুলিকে তাদের দৈর্ঘ্য অনুসারে সাজাতে সাহায্য করেছে। Ordering.from() মেথড ব্যবহার করে কাস্টম কম্প্যারেটরটি সংজ্ঞায়িত করা হয়েছে।


সারাংশ

গুয়াভা (Guava) লাইব্রেরির Ordering ক্লাসটি ডেটা অর্ডারিংয়ের জন্য অনেক সুবিধা প্রদান করে। আপনি ন্যাচারাল অর্ডারিং (Natural Ordering), রিভার্স অর্ডারিং (Reverse Ordering), এবং কাস্টম অর্ডারিং (Custom Ordering) ব্যবহার করে ডেটা সোজা, উল্টো বা নিজের মতো সাজাতে পারবেন। এটি আপনাকে কোডে আরও দক্ষতা এবং নমনীয়তা প্রদান করে এবং জটিল অর্ডারিং লজিক সহজ করে তোলে।


Content added By

Chainable Comparators এর ব্যবহার

283

Guava লাইব্রেরির Chainable Comparators একটি শক্তিশালী ফিচার যা বিভিন্ন Comparator কে একত্রিত (chain) করে একটি একক Comparator তৈরি করার সুযোগ দেয়। এটি বিশেষভাবে উপকারী যখন আপনাকে বিভিন্ন শর্ত অনুযায়ী কোনো অবজেক্ট বা ডেটাকে তুলনা করতে হয়। Comparator এর মাধ্যমে অবজেক্টগুলোকে সাজানো বা তুলনা করা হয়, এবং চেইনেবল Comparator ব্যবহার করে এই তুলনা গুলিকে সহজে একত্রিত করা যায়।


Chainable Comparators কি?

Guava এর Chainable Comparators আপনাকে একাধিক Comparator কে একত্রিত করে একটি কাস্টম Comparator তৈরি করার সুবিধা দেয়। এতে আপনি একাধিক তুলনা শর্তকে একটি সিকোয়েন্স হিসেবে গড়ে তুলতে পারেন, এবং এগুলিকে কেবল একটি Comparator হিসেবে ব্যবহার করতে পারেন। এর ফলে কোড সহজ এবং পড়তে সুবিধাজনক হয়।


Chainable Comparators এর সুবিধা

  1. কোডের পাঠযোগ্যতা উন্নয়ন:
    • একাধিক Comparator ব্যবহার করে যেকোনো অবজেক্টের তুলনা বা সাজানোর নিয়ম পরিষ্কারভাবে তৈরি করা যায়। কোড জটিলতা কমে যায়।
  2. পুনঃব্যবহারযোগ্যতা:
    • একবার চেইন করা Comparator গুলো পুনরায় ব্যবহার করা যায় যেকোনো জায়গায়, যা কোডের রিইউজেবিলিটি বাড়ায়।
  3. ডাইনামিক তুলনা শর্ত:
    • চেইনযোগ্য Comparator ব্যবহার করে আপনি বিভিন্ন শর্তের উপর ভিত্তি করে ডাইনামিকভাবে তুলনা করতে পারেন।

Chainable Comparators এর ব্যবহার

এখানে Guava এর Chainable Comparators ব্যবহার করার একটি উদাহরণ দেয়া হলো:

1. Guava এর Comparators ক্লাসের মাধ্যমে চেইন করা

import com.google.common.collect.Comparators;

import java.util.*;

public class ChainableComparatorExample {
    public static void main(String[] args) {
        // কিছু অবজেক্ট তৈরি
        List<Person> people = Arrays.asList(
                new Person("Alice", 30),
                new Person("Bob", 25),
                new Person("Charlie", 30),
                new Person("David", 35)
        );

        // Chainable Comparators ব্যবহার করে তুলনা শর্ত তৈরি
        Comparator<Person> comparator = Comparators
                .comparing(Person::getAge)  // প্রথমে বয়স অনুযায়ী তুলনা
                .thenComparing(Person::getName);  // বয়স সমান হলে নাম অনুযায়ী তুলনা

        // তালিকা সাজানো
        people.sort(comparator);

        // সাজানো ফলাফল প্রদর্শন
        people.forEach(person -> System.out.println(person.getName() + " - " + person.getAge()));
    }
}

class Person {
    private String name;
    private int age;

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

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

2. ব্যাখ্যা:

  • প্রথমে Comparators.comparing(Person::getAge) ব্যবহার করে প্রথমে বয়স অনুযায়ী তুলনা করা হয়েছে।
  • তারপরে thenComparing(Person::getName) ব্যবহার করে বয়স যদি সমান হয়, তাহলে নামের ভিত্তিতে তুলনা করা হয়েছে।
  • List.sort(comparator) মেথডের মাধ্যমে এই চেইন করা Comparator ব্যবহার করে তালিকা সাজানো হয়েছে।

3. আউটপুট:

Bob - 25
Alice - 30
Charlie - 30
David - 35

এই উদাহরণে, Comparator গুলি প্রথমে বয়সের উপর, এবং বয়স সমান হলে নামের উপর তুলনা করছে।


Guava Chainable Comparators এর অন্যান্য ফিচার

  1. thenComparing() মেথড:
    • এটি ব্যবহার করে আপনি একাধিক তুলনা শর্ত চেইন করতে পারেন। যদি প্রথম শর্ত মেটানো না হয়, তবে পরবর্তী শর্তটি পরীক্ষা করা হবে।
  2. reversed() মেথড:

    • যদি আপনাকে কম্প্যারেটরটির পরিসংখ্যানের উল্টো পরিসংখ্যান চাই, তবে আপনি reversed() মেথড ব্যবহার করতে পারেন। এটি Comparator এর রিভার্সড সংস্করণ প্রদান করে।
    Comparator<Person> reversedComparator = comparator.reversed();
    
  3. nullsFirst() এবং nullsLast() মেথড:

    • যদি আপনার ডেটা কোনো null ভ্যালু ধারণ করে, তাহলে nullsFirst() বা nullsLast() মেথড ব্যবহার করে আপনি null ভ্যালুদের প্রথম বা শেষ স্থানে রাখার সুবিধা পাবেন।
    Comparator<Person> nullSafeComparator = Comparators.nullsFirst(comparator);
    

Guava এর Chainable Comparators একটি শক্তিশালী টুল যা Java-তে বিভিন্ন তুলনা শর্ত একত্রিত করতে সহায়তা করে। এটি কোডকে আরও সহজ, পরিষ্কার এবং পুনঃব্যবহারযোগ্য করে তোলে, যা বড় প্রকল্পে কাজ করার সময় বিশেষভাবে উপকারী। Comparators ব্যবহার করে আপনি একাধিক তুলনা শর্ত চেইন করে খুব সহজেই ডেটা সাজাতে পারেন এবং কোডের জটিলতা কমাতে পারেন।

Content added By

Collections এর জন্য Efficient Sorting Techniques

270

গুয়াভা (Guava) লাইব্রেরি Java Collections এর জন্য কিছু কার্যকরী এবং দক্ষ সোর্টিং (sorting) টেকনিক প্রদান করে। সঠিক সোর্টিং অ্যালগরিদম ব্যবহার করার মাধ্যমে আপনার কোডের পারফরম্যান্স এবং স্কেলেবিলিটি উন্নত করা যেতে পারে, বিশেষ করে যখন বড় ডেটাসেট নিয়ে কাজ করতে হয়।

গুয়াভা লাইব্রেরির মাধ্যমে সোর্টিং

গুয়াভা কিছু প্রাক-নির্ধারিত এবং কাস্টমাইজড সোর্টিং অপশন প্রদান করে যা Java Collections এর সাথে যুক্ত হতে পারে। গুয়াভার Ordering ক্লাসটি মূলত এসব সর্তিং অপারেশন সরবরাহ করে। Ordering ক্লাসটির ব্যবহার Java Collections (যেমন List, Set, Map ইত্যাদি) সোর্ট করার জন্য সুবিধাজনক।

Ordering ক্লাস

গুয়াভা লাইব্রেরিতে Ordering ক্লাসের সাহায্যে আপনি অ্যাবস্ট্রাক্ট কম্প্যারেটর তৈরি করতে পারেন যা আপনার ডেটা সহজেই সোর্ট করতে সক্ষম হবে। এটি Comparable অথবা Comparator ইন্টারফেস ব্যবহার করে কাজ করে।

ব্যবহার

Ordering ক্লাসটি ব্যবহার করে সোর্টিংয়ের সবচেয়ে সাধারণ পদ্ধতিটি হল:

  1. অর্ডারিং অ্যাবজেক্ট তৈরি করা
  2. কম্প্যারেটর ব্যবহার করা
  3. সোর্ট করা

এখানে Ordering ক্লাসের কিছু জনপ্রিয় মেথড আছে, যা সঠিকভাবে সোর্ট করতে সাহায্য করে।

1. সোজা সোজা সোর্টিং (Natural Sorting)

গুয়াভা Ordering.natural() মেথডের মাধ্যমে আপনি একটি সোজা (natural) সোর্ট করতে পারেন, যা Comparable ইন্টারফেসকে অনুসরণ করে।

উদাহরণ

import com.google.common.collect.Ordering;
import java.util.List;
import java.util.Arrays;

public class GuavaSortingExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(5, 1, 3, 8, 2, 7);
        
        // Natural Ordering ব্যবহার
        List<Integer> sortedNumbers = Ordering.natural().sortedCopy(numbers);
        System.out.println("Sorted List: " + sortedNumbers);
    }
}

এখানে, Ordering.natural() Comparable ইনটারফেস অনুসরণ করে সঠিকভাবে Integer উপাদানগুলো সজ্জিত করে।

2. কাস্টম সোর্টিং (Custom Sorting)

আপনি যদি কোনও নির্দিষ্ট শর্ত অনুযায়ী সজ্জিত করতে চান, তবে Ordering.from() ব্যবহার করে একটি কাস্টম কম্প্যারেটর তৈরি করা যেতে পারে। এটি আপনাকে ডেটা সজ্জিত করতে আরও নির্দিষ্ট নিয়ম প্রদান করবে।

উদাহরণ

import com.google.common.collect.Ordering;
import java.util.List;
import java.util.Arrays;

public class GuavaCustomSortingExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Dave");

        // কাস্টম সোর্টিং: নামের দৈর্ঘ্য অনুযায়ী সজ্জিত করা
        List<String> sortedNames = Ordering.natural().onResultOf(String::length).sortedCopy(names);
        System.out.println("Sorted by Length: " + sortedNames);
    }
}

এখানে, Ordering.natural().onResultOf() ব্যবহার করা হয়েছে, যা স্ট্রিংয়ের দৈর্ঘ্য অনুযায়ী সজ্জিত করে।

3. সেড (Reverse) সোর্টিং

কখনও কখনও ডেটা রিভার্স অর্ডারে সজ্জিত করার প্রয়োজন পড়ে। গুয়াভা Ordering.reverse() মেথড ব্যবহার করে আপনি সোজা সোজা সজ্জিত একটি লিস্টকে উল্টো (reverse) সজ্জিত করতে পারেন।

উদাহরণ

import com.google.common.collect.Ordering;
import java.util.List;
import java.util.Arrays;

public class GuavaReverseSortingExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(5, 1, 3, 8, 2, 7);
        
        // Reverse Ordering ব্যবহার
        List<Integer> reverseSortedNumbers = Ordering.natural().reverse().sortedCopy(numbers);
        System.out.println("Reverse Sorted List: " + reverseSortedNumbers);
    }
}

এখানে, Ordering.natural().reverse() ব্যবহার করে সোজা সজ্জিত লিস্টকে উল্টো সজ্জিত করা হয়েছে।

4. Complex Sorting (Multiple Criteria)

কখনও কখনও আপনি একটি বা একাধিক শর্ত অনুসারে সজ্জিত করতে চান, যেমন প্রথমে একটি শর্ত, তারপর দ্বিতীয় শর্ত। এই ধরনের সোর্টিংয়ে Ordering.compound() ব্যবহার করা যেতে পারে।

উদাহরণ

import com.google.common.collect.Ordering;
import java.util.List;
import java.util.Arrays;

public class GuavaCompoundSortingExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Bob", "Dave");
        
        // প্রথমে নামের অ্যালফাবেটিক অর্ডার, তারপর দৈর্ঘ্য অনুসারে সজ্জিত করা
        List<String> sortedNames = Ordering.natural()
                                          .compound(Ordering.natural().onResultOf(String::length))
                                          .sortedCopy(names);
        System.out.println("Sorted by Name and Length: " + sortedNames);
    }
}

এখানে, প্রথমে নামের অ্যালফাবেটিক সজ্জিত এবং তারপর দৈর্ঘ্যের ভিত্তিতে সজ্জিত করা হয়েছে।

5. Sorting with Null Values

গুয়াভা Ordering.nullsFirst() এবং Ordering.nullsLast() মেথডগুলি ব্যবহার করে আপনি সবার আগে বা পরে নাল মানগুলিকে রাখতে পারেন।

উদাহরণ

import com.google.common.collect.Ordering;
import java.util.List;
import java.util.Arrays;

public class GuavaNullSortingExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", null, "Charlie", "Bob", null);
        
        // Null values will appear first
        List<String> sortedNames = Ordering.natural()
                                          .nullsFirst()
                                          .sortedCopy(names);
        System.out.println("Sorted with Nulls First: " + sortedNames);
    }
}

এখানে, Ordering.nullsFirst() ব্যবহার করে নাল মানগুলো প্রথমে সজ্জিত করা হয়েছে।


সারাংশ

গুয়াভা Ordering ক্লাসটি Java Collections এর জন্য অত্যন্ত শক্তিশালী এবং দক্ষ সোর্টিং টেকনিক প্রদান করে। আপনি সোজা সোজা সজ্জিত করতে, কাস্টম সজ্জা তৈরি করতে, সোজা এবং উল্টো সজ্জিত করতে এবং একাধিক শর্তে সজ্জিত করতে এই ক্লাসটি ব্যবহার করতে পারেন। সঠিক সোর্টিং পদ্ধতির ব্যবহার আপনার কোডের কার্যকারিতা এবং কার্যক্ষমতা উন্নত করতে সাহায্য করবে, বিশেষ করে যখন আপনি বড় ডেটাসেট নিয়ে কাজ করেন।

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

Are you sure to start over?

Loading...