Apache Commons Collections লাইব্রেরি জাভাতে ফাংশনাল প্রোগ্রামিং প্যাটার্নের ব্যবহারকে সহজ করে তোলে, যেমন Predicate, Transformer, এবং Closure। এই ক্লাসগুলি বিভিন্ন ধরনের ফিল্টারিং, রূপান্তর এবং অপারেশন করার জন্য ব্যবহৃত হয়। আপনি কাস্টম Predicate, Transformer এবং Closure তৈরি করতে পারেন আপনার নির্দিষ্ট প্রয়োজনে। নিচে আমরা কিভাবে এই ক্লাসগুলিকে কাস্টমাইজ করা যায়, তা আলোচনা করব।
1. Custom Predicate Class তৈরি করা
Predicate হল একটি boolean-valued function যা কোনও অবজেক্ট ইনপুট হিসেবে নেয় এবং একটি true বা false আউটপুট প্রদান করে। এটি সাধারণত filtering কাজের জন্য ব্যবহৃত হয়, যেমন কোন একটি কালেকশনের উপাদান ফিল্টার করা।
Custom Predicate এর বৈশিষ্ট্য:
- এটি কোনো অবজেক্টের উপর পরীক্ষা চালিয়ে একটি বুলিয়ান মান প্রদান করে।
- আপনি একটি কাস্টম Predicate তৈরি করতে পারেন যেটি আপনার নিজের লজিক অনুসারে কাজ করবে।
Custom Predicate উদাহরণ:
ধরা যাক, আমাদের একটি তালিকা আছে এবং আমরা চাই শুধুমাত্র ৫ অক্ষরের বেশি লম্বা স্ট্রিংগুলো বের করতে।
import org.apache.commons.collections4.Predicate;
import org.apache.commons.collections4.CollectionUtils;
import java.util.Arrays;
import java.util.List;
public class CustomPredicateExample {
public static void main(String[] args) {
// Create a list of strings
List<String> list = Arrays.asList("apple", "banana", "orange", "kiwi", "grape");
// Create a custom Predicate to filter strings greater than 5 characters
Predicate<String> lengthPredicate = new Predicate<String>() {
@Override
public boolean evaluate(String input) {
return input.length() > 5; // Filter strings with more than 5 characters
}
};
// Apply the Predicate to filter the list
List<String> filteredList = (List<String>) CollectionUtils.select(list, lengthPredicate);
// Print the filtered list
System.out.println(filteredList); // Output: [banana, orange]
}
}
এখানে, আমরা একটি Predicate তৈরি করেছি যা String এর দৈর্ঘ্য পরীক্ষা করে এবং যেগুলি ৫ অক্ষরের বেশি, সেগুলো ফিল্টার করা হয়েছে।
2. Custom Transformer Class তৈরি করা
Transformer হল একটি ফাংশনাল অপারেশন যা একটি অবজেক্ট ইনপুট হিসেবে নেয় এবং অন্য একটি আউটপুট অবজেক্ট প্রদান করে। এটি মূলত ডেটা ট্রান্সফরমেশন বা রূপান্তর করতে ব্যবহৃত হয়।
Custom Transformer এর বৈশিষ্ট্য:
- এটি একটি ইনপুট অবজেক্ট গ্রহণ করে এবং আউটপুট অবজেক্ট প্রদান করে।
- আপনি একটি কাস্টম Transformer তৈরি করতে পারেন, যা আপনার নির্দিষ্ট ট্রান্সফরমেশন লজিক অনুসরণ করবে।
Custom Transformer উদাহরণ:
ধরা যাক, আমাদের একটি তালিকা আছে এবং আমরা চাই স্ট্রিংগুলির প্রত্যেকটি প্রথম অক্ষরকে বড় অক্ষরে রূপান্তর করতে।
import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.ListUtils;
import java.util.Arrays;
import java.util.List;
public class CustomTransformerExample {
public static void main(String[] args) {
// Create a list of strings
List<String> list = Arrays.asList("apple", "banana", "orange");
// Create a custom Transformer to capitalize the first letter of each string
Transformer<String, String> transformer = new Transformer<String, String>() {
@Override
public String transform(String input) {
if (input == null || input.isEmpty()) {
return input;
}
return input.substring(0, 1).toUpperCase() + input.substring(1);
}
};
// Apply the transformer to the list
List<String> transformedList = (List<String>) ListUtils.transformedList(list, transformer);
// Print the transformed list
System.out.println(transformedList); // Output: [Apple, Banana, Orange]
}
}
এখানে, আমরা একটি Transformer তৈরি করেছি যা স্ট্রিংয়ের প্রথম অক্ষর বড় করে রূপান্তর করে এবং তা একটি তালিকার উপাদানগুলিতে প্রয়োগ করেছি।
3. Custom Closure Class তৈরি করা
Closure হল একটি ফাংশনাল অপারেশন যা একটি অবজেক্ট ইনপুট হিসেবে নেয় এবং কিছু কার্যকরী কাজ সম্পাদন করে, কিন্তু এটি কোন আউটপুট প্রদান করে না। এটি সাধারণত কোনো অপারেশন বা এক্সিকিউটেবল কাজ করার জন্য ব্যবহৃত হয়, যেমন একটি ডেটা কালেকশনের উপর কাজ করা।
Custom Closure এর বৈশিষ্ট্য:
- এটি একটি কার্যকরী অপারেশন যা একটি অবজেক্ট গ্রহণ করে এবং কোনো আউটপুট প্রদান না করে নির্দিষ্ট কাজ করে।
- আপনি একটি কাস্টম Closure তৈরি করতে পারেন যা একটি ডেটা স্ট্রাকচারের উপাদানগুলির উপর কাজ করবে।
Custom Closure উদাহরণ:
ধরা যাক, আমাদের একটি তালিকা রয়েছে এবং আমরা চাই যে, প্রতিটি স্ট্রিংয়ের শেষে একটি বিশেষ চিহ্ন যোগ করা হোক।
import org.apache.commons.collections4.Closure;
import org.apache.commons.collections4.CollectionUtils;
import java.util.Arrays;
import java.util.List;
public class CustomClosureExample {
public static void main(String[] args) {
// Create a list of strings
List<String> list = Arrays.asList("apple", "banana", "orange");
// Create a custom Closure to append an exclamation mark to each string
Closure<String> closure = new Closure<String>() {
@Override
public void execute(String input) {
// Append a special character to each string
System.out.println(input + "!");
}
};
// Apply the closure to the list
CollectionUtils.forEach(list, closure); // Output: apple! banana! orange!
}
}
এখানে, আমরা একটি Closure তৈরি করেছি যা প্রতিটি স্ট্রিংয়ের শেষে ! চিহ্ন যোগ করে এবং forEach পদ্ধতি দিয়ে সেটি তালিকার প্রতিটি উপাদানে প্রয়োগ করা হয়েছে।
Custom Predicate, Transformer, এবং Closure এর মধ্যে পার্থক্য
| ফিচার | Predicate | Transformer | Closure |
|---|---|---|---|
| কাজ | একটি অবজেক্টের উপর পরীক্ষণ চালিয়ে boolean রিটার্ন করা | একটি অবজেক্ট রূপান্তর করে নতুন আউটপুট তৈরি করা | একটি অবজেক্টের উপর কার্যকরী কাজ করা, কোন আউটপুট নেই |
| রিটার্ন টাইপ | boolean | Any (যেকোনো ধরনের অবজেক্ট) | void (কোনো রিটার্ন নেই) |
| ব্যবহার | ফিল্টারিং বা টেস্টিং | ডেটা ট্রান্সফরমেশন বা রূপান্তর | অপারেশন সম্পাদন বা প্রক্রিয়া |
| কোড উদাহরণ | boolean evaluate(T input) | R transform(T input) | void execute(T input) |
সারাংশ
Apache Commons Collections লাইব্রেরি ব্যবহার করে আপনি Predicate, Transformer, এবং Closure ক্লাসগুলো কাস্টমাইজ করে বিশেষ ধরনের ফাংশনাল অপারেশন তৈরি করতে পারেন। Predicate ব্যবহার করে আপনি ডেটার উপর পরীক্ষা চালিয়ে ফলাফল ফিল্টার করতে পারেন, Transformer ব্যবহার করে আপনি ডেটা রূপান্তর করতে পারেন, এবং Closure ব্যবহার করে আপনি কোনো কার্যকরী অপারেশন সম্পাদন করতে পারেন। এই ক্লাসগুলিকে কাস্টমাইজ করার মাধ্যমে আপনি আরও কার্যকরী, পুনঃব্যবহারযোগ্য কোড তৈরি করতে পারবেন যা আপনার প্রোজেক্টের ডেটা ম্যানিপুলেশনকে আরও সহজ এবং কার্যকর করবে।