অ্যাপাচি কমন্স কালেকশনস (Apache Commons Collections) লাইব্রেরি একটি শক্তিশালী টুল যা Java প্রোগ্রামিং ভাষায় উন্নত ডেটা স্ট্রাকচার এবং ইউটিলিটি ক্লাস সরবরাহ করে। এর মধ্যে একটি গুরুত্বপূর্ণ ফিচার হল Functor Classes, যা ফাংশনাল প্রোগ্রামিংয়ের ধারণা অনুসরণ করে এবং আপনাকে ফাংশনাল প্রোগ্রামিংয়ের সুবিধা দিয়ে ডেটা ম্যানিপুলেশন করতে সাহায্য করে।
Functor হল একটি অবজেক্ট যা কিছু প্রক্রিয়া বা অপারেশন প্রতিনিধিত্ব করে, যা সাধারণত কোন অ্যাকশন বা ফাংশন (যেমন মান পরিবর্তন, গণনা, ট্রান্সফরমেশন ইত্যাদি) সম্পাদন করতে ব্যবহৃত হয়। কমন্স কালেকশনসে Functor ক্লাসগুলি আপনাকে কালেকশন এর আইটেমগুলির সাথে বিভিন্ন কার্যক্রম (যেমন ট্রান্সফরমেশন, ম্যানিপুলেশন, ইত্যাদি) করার জন্য সাহায্য করে।
Functor Class গুলি ক্লাসের মধ্যে ফাংশনাল কার্যকলাপ বা অপারেশন সংজ্ঞায়িত করে। এটি মূলত একটি এক্সিকিউটেবল অপারেশন যা কোনো ক্যালকুলেশন বা ট্রান্সফরমেশন সম্পাদন করে। ফানক্টর ক্লাসের মাধ্যমে আপনি বিভিন্ন রকমের ফাংশনাল অপারেশন একত্রিত এবং পুনঃব্যবহারযোগ্য করতে পারেন, যেমন:
অ্যাপাচি কমন্স কালেকশনস লাইব্রেরি বিভিন্ন ধরনের Functor Class সরবরাহ করে যা ডেটা ম্যানিপুলেশন এবং ফাংশনাল প্রোগ্রামিংকে সহজ করে তোলে। নিচে কিছু সাধারণ Functor Class এবং তাদের ব্যবহার আলোচনা করা হল:
Transformer ফানক্টর ক্লাসটি একটি মান (value) গ্রহণ করে এবং সেটি একটি পরিবর্তিত বা ট্রান্সফর্মড মানে রূপান্তর করে। এটি মূলত একটি মাপিং (mapping) অপারেশন হিসেবে কাজ করে, যেখানে ইনপুট মানটি একটি নতুন আউটপুট মানে রূপান্তরিত হয়।
Transformer ক্লাসের প্রধান সুবিধা হল, আপনি একই ফাংশন বা ট্রান্সফরমেশন একাধিক জায়গায় ব্যবহার করতে পারেন, এবং এটি পুনঃব্যবহারযোগ্য।
import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.functors.ConstantTransformer;
public class TransformerExample {
public static void main(String[] args) {
// Create a transformer that always returns "Hello"
Transformer<Object, String> transformer = new ConstantTransformer("Hello");
// Apply the transformer
String result = transformer.transform(null); // Output: "Hello"
System.out.println(result);
}
}
এখানে:
ConstantTransformer
একটি Transformer
যা কোন ইনপুট ছাড়াই একটি নির্দিষ্ট মান (এখানে "Hello") প্রদান করবে।Predicate ফানক্টর ক্লাসটি একটি শর্ত (condition) পরীক্ষা করে এবং true
বা false
রিটার্ন করে। এটি কালেকশনে শর্তসাপেক্ষ নির্বাচন বা ফিল্টারিংয়ের জন্য ব্যবহৃত হয়। এটি বিশেষভাবে উপকারী যখন আপনি চান একটি কালেকশন থেকে শুধুমাত্র নির্দিষ্ট শর্ত পূর্ণকারী আইটেমগুলি নির্বাচন করতে।
import org.apache.commons.collections4.Predicate;
import org.apache.commons.collections4.functors.TruePredicate;
public class PredicateExample {
public static void main(String[] args) {
// Create a predicate that always returns true
Predicate<Object> predicate = TruePredicate.INSTANCE;
// Apply the predicate
boolean result = predicate.evaluate(new Object()); // Output: true
System.out.println(result);
}
}
এখানে:
TruePredicate.INSTANCE
এমন একটি প্রেডিকেট যা সবসময় true
রিটার্ন করে।Action ফানক্টর ক্লাসটি কোনো কার্যকলাপ বা এক্সিকিউশন সম্পাদন করে। এটি সাধারণত কোনো ইনপুট গ্রহণ করে এবং কোনো নির্দিষ্ট কার্যক্রম সম্পাদন করে, যেমন কনসোল আউটপুট, ফাইল লেখা, ইত্যাদি।
import org.apache.commons.collections4.Action;
import org.apache.commons.collections4.functors.PrintAction;
public class ActionExample {
public static void main(String[] args) {
// Create an action that prints a message
Action action = new PrintAction("Hello, Apache Commons!");
// Execute the action
action.execute();
}
}
এখানে:
PrintAction
একটি অ্যাকশন যা নির্দিষ্ট একটি বার্তা (যেমন "Hello, Apache Commons!") কনসোল আউটপুট হিসেবে প্রিন্ট করে।TransformerChain ফানক্টর ক্লাসটি একাধিক ট্রান্সফরমারকে একটি চেইনে একত্রিত করে, এবং ইনপুট মানের উপর একাধিক ট্রান্সফরমেশন প্রক্রিয়া সম্পাদন করে। এটি আপনাকে একাধিক ট্রান্সফরমেশন একসাথে প্রয়োগ করতে সাহায্য করে।
import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.functors.TransformerChain;
import java.util.Arrays;
import java.util.List;
public class TransformerChainExample {
public static void main(String[] args) {
// Define two transformers
Transformer<String, String> toUpperCase = new Transformer<String, String>() {
@Override
public String transform(String input) {
return input.toUpperCase();
}
};
Transformer<String, String> addExclamation = new Transformer<String, String>() {
@Override
public String transform(String input) {
return input + "!";
}
};
// Chain the transformers
Transformer<String, String> chain = new TransformerChain<>(Arrays.asList(toUpperCase, addExclamation));
// Apply the transformer chain
String result = chain.transform("hello");
System.out.println(result); // Output: "HELLO!"
}
}
এখানে:
toUpperCase
এবং অন্যটি addExclamation
) একত্রিত হয়ে একটি চেইন তৈরি করা হয়েছে এবং ইনপুটের উপর একাধিক ট্রান্সফরমেশন প্রয়োগ করা হয়েছে।অ্যাপাচি কমন্স কালেকশনস লাইব্রেরির Functor Class ডেটা ম্যানিপুলেশন এবং ফাংশনাল প্রোগ্রামিংয়ের জন্য একটি শক্তিশালী টুল। এর মধ্যে Transformer, Predicate, Action, TransformerChain প্রভৃতি ফানক্টর ক্লাস রয়েছে, যা ডেটা ট্রান্সফরমেশন, শর্তসাপেক্ষ ফিল্টারিং এবং কার্যকলাপ সম্পাদন করার জন্য ব্যবহৃত হয়। Functor ক্লাসগুলির মাধ্যমে আপনি সহজে এবং কার্যকরভাবে আপনার ডেটা বা কালেকশনগুলোর উপর বিভিন্ন ফাংশন বা অপারেশন প্রয়োগ করতে পারেন।
common.read_more