CollectionUtils এর উন্নত ব্যবহার

Java Technologies - অ্যাপাচি কমন্স কালেকশনস (Apache Common Collection)
136
136

Apache Commons Collections লাইব্রেরির CollectionUtils একটি শক্তিশালী এবং বহুল ব্যবহৃত ক্লাস, যা Java Collections Framework এর উপর ভিত্তি করে ডাটা ম্যানিপুলেশন এবং কার্যক্রম সহজ করতে বিভিন্ন ধরনের ইউটিলিটি মেথড সরবরাহ করে। এটি কালেকশনগুলির উপর ফিল্টারিং, ট্রান্সফরমেশন, ম্যাপিং, সংযুক্তিকরণ এবং আরও অনেক ধরনের কার্যক্রম সম্পাদন করতে সহায়তা করে।

এখানে আমরা CollectionUtils এর কিছু উন্নত ব্যবহার দেখবো, যা আপনাকে কালেকশন ব্যবস্থাপনায় আরো কার্যকরী এবং উন্নত পদ্ধতি প্রদান করবে।


1. CollectionUtils দিয়ে ফিল্টারিং (Filtering)

CollectionUtils ক্লাসে একটি শক্তিশালী select() মেথড রয়েছে, যার মাধ্যমে আপনি কোনো কালেকশনের মধ্যে শর্তাবলী অনুসারে উপাদানগুলি ফিল্টার করতে পারেন। এটি Predicate ইন্টারফেস ব্যবহার করে কাজ করে।

Filtering Example:

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Predicate;
import java.util.Arrays;
import java.util.List;

public class CollectionUtilsFilterExample {
    public static void main(String[] args) {
        // List of numbers
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);

        // Filter even numbers
        List<Integer> evenNumbers = (List<Integer>) CollectionUtils.select(numbers, new Predicate<Integer>() {
            @Override
            public boolean evaluate(Integer number) {
                return number % 2 == 0;  // Only even numbers
            }
        });

        // Print filtered even numbers
        evenNumbers.forEach(System.out::println);
    }
}

আউটপুট:

2
4
6
8

এখানে:

  • select() মেথড ব্যবহার করে Predicate দিয়ে even সংখ্যাগুলি ফিল্টার করা হয়েছে।

2. CollectionUtils দিয়ে ট্রান্সফরমেশন (Transformation)

CollectionUtilscollect() মেথড ব্যবহার করে আপনি একটি কালেকশনের উপাদানগুলিকে ট্রান্সফর্ম করতে পারেন, যেমন একটি নতুন ফরম্যাটে রূপান্তর করা।

Transformation Example:

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Transformer;
import java.util.Arrays;
import java.util.List;

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

        // Convert all words to uppercase
        List<String> upperCaseWords = (List<String>) CollectionUtils.collect(words, new Transformer<String, String>() {
            @Override
            public String transform(String input) {
                return input.toUpperCase();  // Transform to uppercase
            }
        });

        // Print transformed words
        upperCaseWords.forEach(System.out::println);
    }
}

আউটপুট:

APPLE
BANANA
CHERRY

এখানে:

  • collect() মেথড ব্যবহার করে Transformer এর মাধ্যমে প্রতিটি শব্দকে uppercase তে রূপান্তর করা হয়েছে।

3. CollectionUtils দিয়ে সংগ্রহ করা (Aggregation)

CollectionUtils এর sum(), min(), max() মেথডগুলি আপনাকে সংগ্রহের উপাদানগুলির উপর বিভিন্ন ধরণের সংকলন অপারেশন করতে সহায়তা করে, যেমন সর্বনিম্ন, সর্বোচ্চ মান বের করা বা উপাদানগুলির যোগফল বের করা।

Aggregation Example:

import org.apache.commons.collections4.CollectionUtils;
import java.util.Arrays;
import java.util.List;

public class CollectionUtilsAggregationExample {
    public static void main(String[] args) {
        // List of numbers
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

        // Sum of numbers
        int sum = CollectionUtils.sum(numbers);
        System.out.println("Sum: " + sum);  // Output: Sum: 15

        // Max number
        int max = CollectionUtils.max(numbers);
        System.out.println("Max: " + max);  // Output: Max: 5

        // Min number
        int min = CollectionUtils.min(numbers);
        System.out.println("Min: " + min);  // Output: Min: 1
    }
}

আউটপুট:

Sum: 15
Max: 5
Min: 1

এখানে:

  • sum(), max(), এবং min() মেথড ব্যবহার করে সংখ্যার যোগফল, সর্বোচ্চ এবং সর্বনিম্ন মান বের করা হয়েছে।

4. CollectionUtils দিয়ে Collection সমন্বয় (Union, Intersection, Difference)

CollectionUtils লাইব্রেরি আপনাকে কালেকশনের মধ্যে সমন্বয়, মিল এবং পার্থক্য বের করতে সহায়তা করে, যেমন দুটি কালেকশনের মধ্যে Union, Intersection এবং Difference

Union, Intersection, and Difference Example:

import org.apache.commons.collections4.CollectionUtils;
import java.util.Arrays;
import java.util.List;

public class CollectionUtilsUnionExample {
    public static void main(String[] args) {
        // List 1
        List<String> list1 = Arrays.asList("apple", "banana", "cherry");

        // List 2
        List<String> list2 = Arrays.asList("banana", "cherry", "date");

        // Union of two lists
        List<String> union = (List<String>) CollectionUtils.union(list1, list2);
        System.out.println("Union: " + union);  // Output: Union: [apple, banana, cherry, date]

        // Intersection of two lists
        List<String> intersection = (List<String>) CollectionUtils.intersection(list1, list2);
        System.out.println("Intersection: " + intersection);  // Output: Intersection: [banana, cherry]

        // Difference of two lists
        List<String> difference = (List<String>) CollectionUtils.subtract(list1, list2);
        System.out.println("Difference: " + difference);  // Output: Difference: [apple]
    }
}

আউটপুট:

Union: [apple, banana, cherry, date]
Intersection: [banana, cherry]
Difference: [apple]

এখানে:

  • union(), intersection(), এবং subtract() মেথড ব্যবহার করে দুটি লিস্টের মধ্যে সমন্বয়, মিল এবং পার্থক্য বের করা হয়েছে।

5. CollectionUtils দিয়ে Collection কপি (Copy)

CollectionUtils এর copy() মেথড ব্যবহার করে আপনি একটি কালেকশনের কপি তৈরি করতে পারেন। এটি একটি নতুন কালেকশন তৈরি করে, যা মূল কালেকশনের সঠিক কপি হিসেবে কাজ করে।

Copy Example:

import org.apache.commons.collections4.CollectionUtils;
import java.util.Arrays;
import java.util.List;

public class CollectionUtilsCopyExample {
    public static void main(String[] args) {
        // Original list
        List<String> list1 = Arrays.asList("apple", "banana", "cherry");

        // Create a copy of the list
        List<String> copiedList = (List<String>) CollectionUtils.copy(list1);

        // Print copied list
        System.out.println("Copied List: " + copiedList);
    }
}

আউটপুট:

Copied List: [apple, banana, cherry]

এখানে:

  • copy() মেথড ব্যবহার করে list1 এর একটি কপি তৈরি করা হয়েছে।

সারাংশ

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

common.content_added_by

Filtering Collections

129
129

Apache Commons Collections লাইব্রেরি একটি শক্তিশালী টুল যা Java ডেভেলপারদের জন্য বিভিন্ন কার্যকরী ইউটিলিটি প্রদান করে। এর মধ্যে একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হল Filtering Collections। এটি কালেকশনগুলির মধ্যে নির্দিষ্ট শর্তে উপাদান ফিল্টার করার জন্য ব্যবহৃত হয়।

Filtering Collections একটি শক্তিশালী এবং নমনীয় প্রক্রিয়া যা কালেকশনের উপাদানগুলিকে নির্দিষ্ট শর্তের উপর ভিত্তি করে নির্বাচন বা বাদ দিতে সাহায্য করে। আপনি predicate ব্যবহার করে এক বা একাধিক শর্তের ভিত্তিতে উপাদানগুলিকে ফিল্টার করতে পারেন।

Filtering Collections: কীভাবে কাজ করে?

Filtering কালেকশনকে একটি শর্ত বা predicate দ্বারা ফিল্টার করা হয়। Predicate হল একটি ফাংশনাল প্রোগ্রামিং কনসেপ্ট যা একটি ইনপুট গ্রহণ করে এবং একটি বুলিয়ান মান (true/false) রিটার্ন করে। এটি নির্ধারণ করে যে কোন উপাদানটি সংগ্রহের মধ্যে থাকবে এবং কোনটি বাদ যাবে।

Apache Commons Collections এ Filtering করার উপায়

Apache Commons Collections লাইব্রেরিতে CollectionUtils.select() এবং CollectionUtils.filter() এর মতো মেথড রয়েছে যা collections ফিল্টার করতে ব্যবহৃত হয়।


CollectionUtils.select()

CollectionUtils.select() মেথডটি একটি predicate এর মাধ্যমে একটি কালেকশনের উপাদানগুলিকে নির্বাচন করে। এটি একটি নতুন কালেকশন তৈরি করে যা শুধুমাত্র সেই উপাদানগুলো ধারণ করে যেগুলি predicate শর্তে পাস করে।

Usage Example: CollectionUtils.select()

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Predicate;

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

public class FilteringExample {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("apple", "banana", "orange", "avocado");

        // Define the predicate (filter out strings starting with 'a')
        Predicate<String> startsWithA = new Predicate<String>() {
            @Override
            public boolean evaluate(String object) {
                return object.startsWith("a");
            }
        };

        // Use CollectionUtils.select to filter the list
        List<String> filteredList = (List<String>) CollectionUtils.select(list, startsWithA);

        // Print the filtered list
        System.out.println("Filtered List: " + filteredList);
    }
}

Output:

Filtered List: [apple, avocado]

ব্যাখ্যা:

  • startsWithA একটি predicate যা শুধুমাত্র সেই উপাদানগুলো নির্বাচন করে যেগুলির নাম "a"-এ শুরু হয়।
  • CollectionUtils.select() মেথডটি নতুন একটি কালেকশন তৈরি করেছে, যেটিতে শুধুমাত্র "apple" এবং "avocado" রয়েছে।

CollectionUtils.filter()

CollectionUtils.filter() মেথডটি একটি predicate ব্যবহার করে একটি কালেকশনের উপাদানগুলি ফিল্টার করে এবং এতে শুধুমাত্র সেই উপাদানগুলো রাখে যা শর্তে পাস করে। এটি মূল কালেকশনেই পরিবর্তন ঘটায় এবং একটি নতুন কালেকশন রিটার্ন করে না।

Usage Example: CollectionUtils.filter()

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Predicate;

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

public class FilteringExample {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("apple", "banana", "orange", "avocado");

        // Define the predicate (filter out strings starting with 'a')
        Predicate<String> startsWithA = new Predicate<String>() {
            @Override
            public boolean evaluate(String object) {
                return object.startsWith("a");
            }
        };

        // Use CollectionUtils.filter to filter the list
        CollectionUtils.filter(list, startsWithA);

        // Print the filtered list (modified original list)
        System.out.println("Filtered List: " + list);
    }
}

Output:

Filtered List: [apple, avocado]

ব্যাখ্যা:

  • এখানে CollectionUtils.filter() মেথডটি সরাসরি list এর উপাদানগুলো ফিল্টার করেছে এবং শুধুমাত্র সেই উপাদানগুলো রেখেছে যেগুলো predicate শর্তে পাস করেছে।
  • মূল list পরিবর্তিত হয়েছে এবং apple এবং avocado রেখেছে।

CollectionUtils.filter() এবং CollectionUtils.select() এর মধ্যে পার্থক্য

FeatureCollectionUtils.select()CollectionUtils.filter()
Return ValueReturns a new collection with the filtered elements.Modifies the original collection in place.
UsageWhen you need a new collection with filtered elements.When you want to modify the original collection directly.
Thread SafetyNo impact on thread safety since it returns a new collection.Modifies the collection directly, so thread safety is important.

Predicate Filtering Example

Predicate হল একটি ইন্টারফেস যা একটি শর্ত নির্ধারণ করে এবং true অথবা false রিটার্ন করে। এটি একটি খুবই শক্তিশালী কৌশল যা কালেকশনের উপাদানগুলিতে শর্ত প্রয়োগ করতে ব্যবহৃত হয়। নিচে একটি উদাহরণ দেওয়া হল যেখানে Predicate ব্যবহার করা হয়েছে:

Predicate Filtering Example:

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Predicate;

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

public class PredicateFilteringExample {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("apple", "banana", "avocado", "grape");

        // Predicate to select strings that contain the letter 'a'
        Predicate<String> containsA = new Predicate<String>() {
            @Override
            public boolean evaluate(String object) {
                return object.contains("a");
            }
        };

        // Use CollectionUtils.select to filter based on the predicate
        List<String> filteredList = (List<String>) CollectionUtils.select(list, containsA);

        // Print the filtered list
        System.out.println("Filtered List: " + filteredList);
    }
}

Output:

Filtered List: [apple, banana, avocado]

ব্যাখ্যা:

  • এখানে, Predicate ব্যবহার করা হয়েছে যেটি কেবলমাত্র সেই উপাদানগুলো নির্বাচন করে যেগুলিতে 'a' চরিত্র রয়েছে।
  • CollectionUtils.select() মেথডটি শুধুমাত্র সেই উপাদানগুলো ফিরিয়ে দিয়েছে।

Filtering Collections বা কালেকশন ফিল্টারিং একটি শক্তিশালী টুল যা CollectionUtils.select() এবং CollectionUtils.filter() মেথডের মাধ্যমে সহজেই করা যায়। এই মেথডগুলো আপনাকে predicate ব্যবহার করে শর্তানুসারে কালেকশনের উপাদানগুলো ফিল্টার করতে সহায়তা করে। select() একটি নতুন কালেকশন রিটার্ন করে, যেখানে filter() মূল কালেকশনটিকে সরাসরি পরিবর্তন করে। আপনি যখন বড় ডেটা সেটের উপরে কার্যকরভাবে শর্ত প্রয়োগ করতে চান তখন এই ফিল্টারিং কৌশলগুলি খুবই উপকারী।

common.content_added_by

Intersection, Union এবং Disjunction

162
162

অ্যাপাচি কমন্স কালেকশনস (Apache Commons Collections) লাইব্রেরি এমন বিভিন্ন ইউটিলিটি ক্লাস সরবরাহ করে, যা বিভিন্ন কালেকশনের মধ্যে Intersection, Union, এবং Disjunction অপারেশন করতে সাহায্য করে। এগুলি বিশেষভাবে উপকারী যখন আপনাকে দুটি বা ততোধিক কালেকশনের মধ্যে সম্পর্কিত উপাদান খুঁজে বের করতে হয়, যেমন দুটি সেটের সম্মিলন বা পার্থক্য।

এই অপারেশনগুলির মাধ্যমে আপনি Set, List, Map বা অন্যান্য কালেকশনের মধ্যে কমন উপাদান (intersection), সম্মিলিত উপাদান (union), বা পার্থক্য (disjunction) বের করতে পারেন। অ্যাপাচি কমন্স কালেকশনসে এই ধরনের কাজের জন্য বিশেষ কিছু ইউটিলিটি ক্লাস এবং পদ্ধতি রয়েছে, যেমন CollectionUtils


1. Intersection (সাধারণ উপাদান)


Intersection অপারেশন দুটি কালেকশনের মধ্যে সেই উপাদানগুলো বের করে যা উভয়েই উপস্থিত থাকে। এটি সাধারণত Set বা List এর মধ্যে ব্যবহৃত হয়।

Intersection এর বৈশিষ্ট্য:

  • দুটি কালেকশনের মধ্যে যে উপাদানগুলো সাধারণ থাকে, সেগুলো নির্বাচন করা হয়।
  • এটি কমন উপাদান বের করতে ব্যবহৃত হয়।

Intersection উদাহরণ:

import org.apache.commons.collections4.CollectionUtils;
import java.util.Arrays;
import java.util.List;

public class IntersectionExample {
    public static void main(String[] args) {
        // Create two lists
        List<String> list1 = Arrays.asList("apple", "banana", "orange");
        List<String> list2 = Arrays.asList("banana", "orange", "grape");

        // Get intersection of the two lists
        List<String> intersection = (List<String>) CollectionUtils.intersection(list1, list2);

        // Print the intersection
        System.out.println(intersection);  // Output: [banana, orange]
    }
}

এখানে, CollectionUtils.intersection() পদ্ধতি ব্যবহার করা হয়েছে, যা দুটি তালিকার মধ্যে সাধারণ উপাদান "banana" এবং "orange" বের করেছে।


2. Union (সম্মিলন)


Union অপারেশন দুটি কালেকশনের মধ্যে সমস্ত ইউনিক উপাদান সংগ্রহ করে। এটি দুটি বা তার বেশি কালেকশনের সম্মিলন তৈরি করে এবং সমস্ত উপাদান একত্রে দেয়। এটি ডুপ্লিকেট উপাদানগুলো বাদ দেয় এবং শুধুমাত্র ইউনিক উপাদান থাকে।

Union এর বৈশিষ্ট্য:

  • দুটি বা তার বেশি কালেকশনের সকল উপাদান একত্রে যুক্ত করা হয়।
  • Set এর মধ্যে ডুপ্লিকেট এন্ট্রিগুলি বাদ দেওয়া হয়, তবে List এর মধ্যে ডুপ্লিকেট থাকতে পারে।

Union উদাহরণ:

import org.apache.commons.collections4.CollectionUtils;
import java.util.Arrays;
import java.util.List;

public class UnionExample {
    public static void main(String[] args) {
        // Create two lists
        List<String> list1 = Arrays.asList("apple", "banana", "orange");
        List<String> list2 = Arrays.asList("banana", "orange", "grape");

        // Get union of the two lists
        List<String> union = (List<String>) CollectionUtils.union(list1, list2);

        // Print the union
        System.out.println(union);  // Output: [apple, banana, orange, banana, orange, grape]
    }
}

এখানে, CollectionUtils.union() পদ্ধতি দুটি তালিকার সম্মিলন তৈরি করেছে। List ব্যবহার করার কারণে ডুপ্লিকেট উপাদান "banana" এবং "orange" বাদ দেওয়া হয়নি।


3. Disjunction (পার্থক্য)


Disjunction অপারেশন দুটি কালেকশনের মধ্যে যে উপাদানগুলো একটিতে রয়েছে কিন্তু অন্যটিতে নেই, সেগুলো বের করে। এটি মূলত দুটি কালেকশনের মধ্যে পার্থক্য খুঁজে বের করতে ব্যবহৃত হয়। Disjunction অপারেশনটি দুটি কালেকশনের মধ্যে একে অপরের সাথে অভিন্ন না হওয়া উপাদানগুলো সংগ্রহ করে।

Disjunction এর বৈশিষ্ট্য:

  • দুটি কালেকশনের মধ্যে যেগুলি একটিতে আছে কিন্তু অন্যটিতে নেই, সেগুলি নির্বাচন করা হয়।
  • এটি Symmetric Difference এর মতো কাজ করে, যেখানে দুটি সেটের পার্থক্য নির্ধারণ করা হয়।

Disjunction উদাহরণ:

import org.apache.commons.collections4.CollectionUtils;
import java.util.Arrays;
import java.util.List;

public class DisjunctionExample {
    public static void main(String[] args) {
        // Create two lists
        List<String> list1 = Arrays.asList("apple", "banana", "orange");
        List<String> list2 = Arrays.asList("banana", "orange", "grape");

        // Get disjunction of the two lists
        List<String> disjunction = (List<String>) CollectionUtils.disjunction(list1, list2);

        // Print the disjunction
        System.out.println(disjunction);  // Output: [apple, grape]
    }
}

এখানে, CollectionUtils.disjunction() পদ্ধতি দুটি তালিকার পার্থক্য বের করেছে। "apple" এবং "grape" তালিকায় একে অপরের মধ্যে উপস্থিত নেই, তাই এগুলি পার্থক্য হিসেবে নির্বাচন করা হয়েছে।


চারটি মৌলিক কালেকশন অপারেশন

অপারেশনবর্ণনাফলাফল
Intersectionদুটি কালেকশনের মধ্যে সাধারণ উপাদানগুলো বের করা।[banana, orange] (যেহেতু উভয় তালিকায় এই উপাদান দুটি রয়েছে)
Unionদুটি কালেকশনের সমস্ত ইউনিক উপাদান একত্রিত করা।[apple, banana, orange, grape]
Disjunctionদুটি কালেকশনের মধ্যে পার্থক্য বা ভিন্ন উপাদান বের করা।[apple, grape] (যেহেতু এক তালিকায় এটি রয়েছে কিন্তু অন্যটিতে নেই)
Subtractionএকটি কালেকশনের উপাদান থেকে আরেকটি কালেকশনের উপাদান মুছে ফেলা।[apple] (list1 থেকে list2 এর উপাদান বাদ দিলে)


Intersection, Union, এবং Disjunction অপারেশনগুলি Apache Commons Collections এর শক্তিশালী বৈশিষ্ট্য, যা বিভিন্ন কালেকশনের মধ্যে সম্পর্কিত উপাদান খুঁজে বের করার জন্য ব্যবহৃত হয়। এই অপারেশনগুলি খুবই উপকারী যখন আপনাকে বিভিন্ন ডেটা স্ট্রাকচার বা সেটের মধ্যে সাধারণ উপাদান (intersection), সম্মিলিত উপাদান (union), বা পার্থক্য (disjunction) বের করতে হয়। CollectionUtils ক্লাসের মাধ্যমে এই অপারেশনগুলো কার্যকরীভাবে এবং সহজে সম্পন্ন করা যায়।

common.content_added_by

CollectionUtils.isEqualCollection এবং CollectionUtils.cardinalityMap

130
130

Apache Commons Collections লাইব্রেরি Java Collections Framework এর জন্য অনেক শক্তিশালী ইউটিলিটি ক্লাস এবং ফাংশন প্রদান করে। এর মধ্যে CollectionUtils.isEqualCollection এবং CollectionUtils.cardinalityMap দুটি গুরুত্বপূর্ণ ফাংশন রয়েছে, যা collections এর সাথে কাজ করার সময় বেশ কার্যকরী হতে পারে।

1. CollectionUtils.isEqualCollection

CollectionUtils.isEqualCollection ফাংশনটি দুটি Collection (যেমন List, Set, Bag, ইত্যাদি) এর সমানতা যাচাই করার জন্য ব্যবহৃত হয়। এই ফাংশনটি দেখে নেয় যে, দুটি কালেকশন একই উপাদান ধারণ করছে এবং প্রতিটি উপাদান একই সংখ্যায় আছে কিনা।

বৈশিষ্ট্য:

  • এটি শুধুমাত্র উপাদানগুলির উপস্থিতি যাচাই করে, তবে তাদের অর্ডার (order) অথবা পুনরাবৃত্তি (duplicates) মনে রাখে না।
  • Set বা List এর ক্ষেত্রে যদি দুটি কালেকশন একে অপরের মতো উপাদান ধারণ করে তবে এটি true রিটার্ন করবে।

উদাহরণ: isEqualCollection ব্যবহার

import org.apache.commons.collections4.CollectionUtils;
import java.util.Arrays;
import java.util.List;

public class CollectionUtilsExample {
    public static void main(String[] args) {
        // দুটি List তৈরি করা
        List<String> list1 = Arrays.asList("apple", "banana", "cherry");
        List<String> list2 = Arrays.asList("banana", "cherry", "apple");

        // দুটি Collection এর সমানতা যাচাই করা
        boolean isEqual = CollectionUtils.isEqualCollection(list1, list2);

        System.out.println("Are the collections equal? " + isEqual); // Output: true
    }
}

আউটপুট:

Are the collections equal? true

এখানে:

  • দুটি List (list1 এবং list2) একই উপাদান ধারণ করছে, তবে তাদের অর্ডার আলাদা।
  • CollectionUtils.isEqualCollection(list1, list2) এই দুটি Collection এর মধ্যে সমানতা যাচাই করেছে এবং এটি true রিটার্ন করেছে কারণ উপাদানগুলো সমান।

কিভাবে কাজ করে:

  • অর্ডার এখানে গুরুত্বপূর্ণ নয়। list1 এবং list2 এর মধ্যে উপাদানগুলি সমান হলেও, তাদের অর্ডার ভিন্ন হতে পারে।
  • CollectionUtils.isEqualCollection শুধুমাত্র উপাদান এবং তাদের সংখ্যা যাচাই করে, যাতে অর্ডার বা পুনরাবৃত্তি গণনা হয় না।

2. CollectionUtils.cardinalityMap

cardinalityMap একটি ইউটিলিটি মেথড যা একটি Collection থেকে cardinality মানচিত্র তৈরি করে, অর্থাৎ, এটি একটি Map তৈরি করে যেখানে প্রতিটি উপাদান এবং তার উপস্থিতির সংখ্যা সংরক্ষিত থাকে।

বৈশিষ্ট্য:

  • এটি একটি Map রিটার্ন করে, যেখানে কী হচ্ছে কালেকশনের উপাদান এবং মান হচ্ছে ঐ উপাদানের উপস্থিতির সংখ্যা।
  • এটি বিশেষত তখন ব্যবহারী হতে পারে যখন আপনি জানাতে চান যে একটি নির্দিষ্ট উপাদান কতবার উপস্থিত রয়েছে।

উদাহরণ: cardinalityMap ব্যবহার

import org.apache.commons.collections4.CollectionUtils;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

public class CollectionUtilsExample {
    public static void main(String[] args) {
        // একটি List তৈরি করা
        List<String> list = Arrays.asList("apple", "banana", "apple", "cherry", "banana", "banana");

        // cardinalityMap তৈরি করা
        Map<String, Integer> cardinalityMap = CollectionUtils.cardinalityMap(list);

        // cardinalityMap প্রিন্ট করা
        System.out.println("Cardinality Map: " + cardinalityMap);
    }
}

আউটপুট:

Cardinality Map: {apple=2, banana=3, cherry=1}

এখানে:

  • cardinalityMap(list) ফাংশনটি একটি Map তৈরি করেছে, যেখানে উপাদান এবং তাদের উপস্থিতির সংখ্যা সংরক্ষিত রয়েছে:
    • "apple" ২ বার,
    • "banana" ৩ বার,
    • "cherry" ১ বার।

কিভাবে কাজ করে:

  • cardinalityMap একটি Collection এর উপাদানগুলি গণনা করে এবং তাদের সংখ্যা Map হিসেবে প্রদান করে।
  • এটি Set বা List এর উপর কাজ করতে পারে এবং উপাদানগুলির উপস্থিতির সংখ্যা সঠিকভাবে ট্র্যাক করতে সক্ষম।

সারাংশ

  • CollectionUtils.isEqualCollection: দুটি Collection এর সমানতা যাচাই করে, যেখানকার উপাদান এবং সংখ্যা সমান থাকে, তবে তাদের অর্ডার বা পুনরাবৃত্তি (duplicates) যাচাই করা হয় না।
  • CollectionUtils.cardinalityMap: একটি Collection থেকে cardinality map তৈরি করে, যেখানে প্রতিটি উপাদান এবং তার উপস্থিতির সংখ্যা সংরক্ষিত থাকে। এটি কোনো List বা Set এ উপাদানের উপস্থিতি গণনা করার জন্য ব্যবহৃত হয়।

এই দুটি ফাংশন Apache Commons Collections লাইব্রেরির অন্যতম শক্তিশালী ইউটিলিটি, যা Collection সম্পর্কিত কাজগুলো সহজ, কার্যকরী এবং আরও নির্ভুল করে তোলে।

common.content_added_by

List Partitioning এবং Partitioned Lists

137
137

List Partitioning হলো একটি বড় তালিকাকে (list) ছোট ছোট তালিকায় বিভক্ত করার একটি কৌশল। অ্যাপাচি কমন্স কালেকশনস (Apache Commons Collections) এই কাজটি সহজে করার জন্য ListUtils.partition() মেথড সরবরাহ করে। এটি বিশেষত বড় ডেটাসেট পরিচালনা করার সময় কার্যকর, যেখানে তালিকার উপাদানগুলো ছোট ছোট ভাগে বিভক্ত করে প্রক্রিয়া করা সহজ হয়।


List Partitioning এর ধারণা

List Partitioning এর মাধ্যমে একটি মূল তালিকাকে নির্দিষ্ট আকারের (fixed size) ভাগে বিভক্ত করা হয়। উদাহরণস্বরূপ:

মূল তালিকা: [1, 2, 3, 4, 5, 6, 7]
প্রতিটি ভাগে সর্বাধিক ৩টি আইটেম রাখলে আউটপুট হবে: [[1, 2, 3], [4, 5, 6], [7]]


List Partitioning এর ব্যবহার

import org.apache.commons.collections4.ListUtils;

import java.util.ArrayList;
import java.util.List;

public class ListPartitionExample {
    public static void main(String[] args) {
        // বড় একটি তালিকা তৈরি
        List<Integer> numbers = new ArrayList<>();
        for (int i = 1; i <= 10; i++) {
            numbers.add(i);
        }

        // তালিকাকে ৩-এর ভাগে ভাগ করা
        List<List<Integer>> partitionedLists = ListUtils.partition(numbers, 3);

        // প্রতিটি ভাগ প্রিন্ট করা
        for (List<Integer> partition : partitionedLists) {
            System.out.println(partition);
        }
    }
}

আউটপুট:

[1, 2, 3]  
[4, 5, 6]  
[7, 8, 9]  
[10]  

Partitioned Lists এর বৈশিষ্ট্য

  1. ফিক্সড সাইজের ভাগ:
    প্রতিটি ভাগে নির্দিষ্ট সংখ্যক উপাদান থাকে।
  2. শেষ ভাগ ছোট হতে পারে:
    যদি মূল তালিকার উপাদান সংখ্যা ফিক্সড সাইজ দ্বারা বিভাজ্য না হয়, তাহলে শেষ ভাগ ছোট হবে।
  3. মূল তালিকার সাথে সম্পর্ক:
    ভাগগুলো মূল তালিকার ভিউ (view) হিসেবে কাজ করে। তাই মূল তালিকায় কোনো পরিবর্তন করলে তা ভাগগুলোতেও প্রতিফলিত হবে।

ব্যবহারিক প্রয়োগ

১. বড় ডেটাসেট প্রক্রিয়াকরণ

List Partitioning বড় ডেটাসেট প্রক্রিয়াকরণের ক্ষেত্রে অত্যন্ত কার্যকর। যেমন:

  • ডেটাবেস থেকে রেকর্ড পড়ে প্রক্রিয়াকরণ করা।
  • API-তে ডেটা পাঠানো যেখানে প্রতিটি অনুরোধে সীমিত সংখ্যক রেকর্ড অনুমোদিত।
public void processInBatches(List<String> records) {
    int batchSize = 100; // প্রতিটি ব্যাচে ১০০ রেকর্ড
    List<List<String>> batches = ListUtils.partition(records, batchSize);

    for (List<String> batch : batches) {
        // প্রতিটি ব্যাচ প্রসেস করা
        sendToApi(batch);
    }
}

private void sendToApi(List<String> batch) {
    // API-তে ব্যাচ প্রেরণ করার লজিক
    System.out.println("Sending batch: " + batch);
}

২. প্যারালাল প্রসেসিং

তালিকাকে ভাগ করে বিভিন্ন থ্রেডে প্রক্রিয়াকরণের জন্য List Partitioning ব্যবহার করা যায়।

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ParallelProcessingExample {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        for (int i = 1; i <= 100; i++) {
            numbers.add(i);
        }

        List<List<Integer>> partitions = ListUtils.partition(numbers, 10);
        ExecutorService executor = Executors.newFixedThreadPool(5);

        for (List<Integer> partition : partitions) {
            executor.submit(() -> {
                System.out.println("Processing partition: " + partition);
            });
        }

        executor.shutdown();
    }
}

Partitioning এর সুবিধা

  1. বড় তালিকা পরিচালনা সহজ করা:
    বড় তালিকা ছোট ছোট তালিকায় ভাগ করে ব্যবস্থাপনা ও প্রসেসিং সহজ হয়।
  2. স্মৃতিশক্তির ব্যবহার কমানো:
    ছোট অংশে বিভক্ত করে মেমোরি ব্যবস্থাপনা কার্যকর করা যায়।
  3. প্যারালাল প্রসেসিং সাপোর্ট:
    তালিকার প্রতিটি অংশ আলাদাভাবে থ্রেড বা প্রক্রিয়ায় প্রক্রিয়া করা যায়।
  4. পোর্টেবল এবং পুনঃব্যবহারযোগ্য:
    ListUtils.partition() একটি নির্ভরযোগ্য এবং পুনঃব্যবহারযোগ্য সমাধান।

সতর্কতা

  • মূল তালিকার পরিবর্তন:
    ভাগগুলো মূল তালিকার ভিউ হিসেবে কাজ করে। তাই মূল তালিকার পরিবর্তন ভাগগুলোর ডেটাতেও প্রভাব ফেলবে।
  • নালপয়েন্টার এক্সসেপশন এড়ানো:
    নিশ্চিত করুন যে তালিকা null নয় এবং ফিক্সড সাইজ ধনাত্মক সংখ্যা।

সারাংশ

List Partitioning বড় তালিকা পরিচালনার একটি কার্যকর উপায়, যা অ্যাপাচি কমন্স কালেকশনসের ListUtils.partition() মেথড ব্যবহার করে সহজেই করা যায়। এটি ডেটাসেট পরিচালনা, প্যারালাল প্রসেসিং, এবং API কলের মতো বিভিন্ন ক্ষেত্রে প্রয়োগ করা হয়।

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

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

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

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