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)
CollectionUtils এ collect() মেথড ব্যবহার করে আপনি একটি কালেকশনের উপাদানগুলিকে ট্রান্সফর্ম করতে পারেন, যেমন একটি নতুন ফরম্যাটে রূপান্তর করা।
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 এর মাধ্যমে জটিল কার্যক্রম সহজে সম্পাদন করতে পারেন এবং ডাটা স্ট্রাকচারগুলির উপর বিভিন্ন প্রক্রিয়া প্রয়োগ করতে পারবেন।
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() এর মধ্যে পার্থক্য
| Feature | CollectionUtils.select() | CollectionUtils.filter() |
|---|---|---|
| Return Value | Returns a new collection with the filtered elements. | Modifies the original collection in place. |
| Usage | When you need a new collection with filtered elements. | When you want to modify the original collection directly. |
| Thread Safety | No 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() মূল কালেকশনটিকে সরাসরি পরিবর্তন করে। আপনি যখন বড় ডেটা সেটের উপরে কার্যকরভাবে শর্ত প্রয়োগ করতে চান তখন এই ফিল্টারিং কৌশলগুলি খুবই উপকারী।
অ্যাপাচি কমন্স কালেকশনস (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 ক্লাসের মাধ্যমে এই অপারেশনগুলো কার্যকরীভাবে এবং সহজে সম্পন্ন করা যায়।
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 সম্পর্কিত কাজগুলো সহজ, কার্যকরী এবং আরও নির্ভুল করে তোলে।
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 এর বৈশিষ্ট্য
- ফিক্সড সাইজের ভাগ:
প্রতিটি ভাগে নির্দিষ্ট সংখ্যক উপাদান থাকে। - শেষ ভাগ ছোট হতে পারে:
যদি মূল তালিকার উপাদান সংখ্যা ফিক্সড সাইজ দ্বারা বিভাজ্য না হয়, তাহলে শেষ ভাগ ছোট হবে। - মূল তালিকার সাথে সম্পর্ক:
ভাগগুলো মূল তালিকার ভিউ (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 এর সুবিধা
- বড় তালিকা পরিচালনা সহজ করা:
বড় তালিকা ছোট ছোট তালিকায় ভাগ করে ব্যবস্থাপনা ও প্রসেসিং সহজ হয়। - স্মৃতিশক্তির ব্যবহার কমানো:
ছোট অংশে বিভক্ত করে মেমোরি ব্যবস্থাপনা কার্যকর করা যায়। - প্যারালাল প্রসেসিং সাপোর্ট:
তালিকার প্রতিটি অংশ আলাদাভাবে থ্রেড বা প্রক্রিয়ায় প্রক্রিয়া করা যায়। - পোর্টেবল এবং পুনঃব্যবহারযোগ্য:
ListUtils.partition() একটি নির্ভরযোগ্য এবং পুনঃব্যবহারযোগ্য সমাধান।
সতর্কতা
- মূল তালিকার পরিবর্তন:
ভাগগুলো মূল তালিকার ভিউ হিসেবে কাজ করে। তাই মূল তালিকার পরিবর্তন ভাগগুলোর ডেটাতেও প্রভাব ফেলবে। - নালপয়েন্টার এক্সসেপশন এড়ানো:
নিশ্চিত করুন যে তালিকাnullনয় এবং ফিক্সড সাইজ ধনাত্মক সংখ্যা।
সারাংশ
List Partitioning বড় তালিকা পরিচালনার একটি কার্যকর উপায়, যা অ্যাপাচি কমন্স কালেকশনসের ListUtils.partition() মেথড ব্যবহার করে সহজেই করা যায়। এটি ডেটাসেট পরিচালনা, প্যারালাল প্রসেসিং, এবং API কলের মতো বিভিন্ন ক্ষেত্রে প্রয়োগ করা হয়।
Read more