অ্যাপাচি কমন্স কালেকশনস (Apache Commons Collections) লাইব্রেরি Lazy এবং Transformed Collections ব্যবহারের জন্য বিভিন্ন ইউটিলিটি প্রদান করে। এগুলো ডেটা স্ট্রাকচার এবং কালেকশনগুলোকে আরও গতিশীল (dynamic) এবং কাস্টমাইজযোগ্য করে তোলে।
Lazy Collections এমন কালেকশন যার মধ্যে ডেটা কেবল তখনই লোড হয় বা প্রক্রিয়া হয় যখন তা প্রয়োজন হয়। সাধারণত, এটি বড় ডেটাসেট বা কম্পিউটেশনাল কাজের জন্য ব্যবহৃত হয়, যেখানে পুরো ডেটা একসাথে লোড না করে প্রয়োজনমতো কেবল একটি অংশ প্রক্রিয়া করা হয়।
অ্যাপাচি কমন্স কালেকশনসে LazyCollection ক্লাস ব্যবহার করে Lazy সুরক্ষা (deferred execution) তৈরি করা যায়।
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.collections4.list.LazyList;
import org.apache.commons.collections4.Factory;
import java.util.List;
public class LazyCollectionExample {
public static void main(String[] args) {
// LazyList তৈরি করতে Factory ব্যবহার
Factory<String> factory = () -> "New Item";
List<String> lazyList = LazyList.decorate(new java.util.ArrayList<>(), factory);
// List এ প্রথম আইটেম অ্যাক্সেস করা হবে
System.out.println("First item: " + lazyList.get(0)); // প্রথমবারে "New Item" তৈরি হবে
}
}
আউটপুট:
First item: New Item
এখানে, lazyList.get(0)
কল করার সময়, কেবল তখনই একটি নতুন String
অবজেক্ট তৈরি হবে।
Transformed Collections হলো এমন কালেকশন যেখানে উপাদানগুলোর পরিবর্তন বা রূপান্তর (transformation) করা হয়। এটি ডেটার একটি বা একাধিক বৈশিষ্ট্য পরিবর্তন করার জন্য ব্যবহৃত হয়, যেমন রূপান্তরিত স্ট্রিং, সংখ্যা, বা অন্যান্য ডেটা টাইপে পরিণত করা।
Transformer ইন্টারফেস ব্যবহার করে Transformed Collection তৈরি করা হয়। CollectionUtils.collect()
এবং ListUtils.transform()
ব্যবহার করে সহজেই রূপান্তর করা যায়।
import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
public class TransformedCollectionExample {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
// Transformer তৈরি যা Integer কে String এ রূপান্তর করবে
Transformer<Integer, String> transformer = input -> "Number: " + input;
// List এ প্রতিটি উপাদান রূপান্তর করা
List<String> transformed = new ArrayList<>(CollectionUtils.collect(numbers, transformer));
System.out.println("Transformed List: " + transformed);
}
}
আউটপুট:
Transformed List: [Number: 1, Number: 2, Number: 3]
এখানে, Transformer
প্রতিটি Integer
উপাদানকে একটি String
এ রূপান্তরিত করছে।
যখন ডেটাসেট খুব বড় হয় এবং পুরো ডেটা একসাথে লোড করা সম্ভব না হয়, তখন Lazy Collection ব্যবহার করা হয়। উদাহরণস্বরূপ, একটি বিশাল তালিকা থেকে ডেটা কেবল তখনই আনা হবে যখন প্রয়োজন হবে।
Transformed Collections সাধারণত ডেটা রূপান্তরের জন্য ব্যবহৃত হয়, যেমন একটি তালিকায় থাকা সংখ্যাগুলোকে স্ট্রিং-এ রূপান্তর করা বা কোন কাস্টম ফিল্টার প্রয়োগ করা।
Lazy এবং Transformed Collections বৃহৎ ডেটা অ্যাপ্লিকেশনে অপটিমাইজেশন, পারফরম্যান্স উন্নয়ন এবং মেমোরি সাশ্রয়ে সহায়তা করে।
Lazy Collections এবং Transformed Collections অ্যাপাচি কমন্স কালেকশনস লাইব্রেরির শক্তিশালী বৈশিষ্ট্য, যা ডেটা প্রক্রিয়াকরণকে আরও দক্ষ ও কার্যকর করে। Lazy Collections মেমোরি সাশ্রয়ী এবং পারফরম্যান্স অপটিমাইজেশনের জন্য উপযুক্ত, যখন Transformed Collections ডেটাকে রূপান্তর বা পরিবর্তন করার জন্য ব্যবহৃত হয়। এগুলো বৃহৎ ডেটাসেট বা জটিল ডেটা ম্যানিপুলেশনের ক্ষেত্রে অত্যন্ত কার্যকর।
অ্যাপাচি কমন্স কালেকশনস (Apache Commons Collections) লাইব্রেরিতে Lazy Collection একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা ডেটা সংগ্রহকে আরও কার্যকরী এবং অপটিমাইজড করে তোলে। Lazy Collection এমন একটি ধারণা, যেখানে ডেটা সংগ্রহ শুধুমাত্র যখন প্রয়োজন হয় তখনই সম্পূর্ণরূপে তৈরি বা লোড হয়। এর মাধ্যমে মেমরি ব্যবহার এবং প্রসেসিং সময়ের অপচয় কমানো সম্ভব হয়, বিশেষ করে যখন বড় ডেটা সেট বা রিসোর্স ইনটেনসিভ অপারেশনগুলি প্রয়োজন হয়।
Lazy Collection ধারণা অনুযায়ী, একটি ডেটা সংগ্রহ (যেমন List বা Map) সরাসরি প্রক্রিয়াজাত বা ইনিশিয়ালাইজ না করে, শুধুমাত্র যখন ওই ডেটা সংগ্রহটি প্রয়োজন হবে, তখন তা প্রক্রিয়া শুরু হয়। এটি Lazy Initialization নামে পরিচিত, যেখানে ইনিশিয়ালাইজেশনটি বিলম্বিত হয়।
এই কৌশলটি অনেক ক্ষেত্রে উপকারী হতে পারে, বিশেষত যখন:
অ্যাপাচি কমন্স কালেকশনস লাইব্রেরি LazyList
এবং LazyMap
এর মতো ক্লাস প্রদান করে, যা Lazy Initialization সমর্থন করে। এই ক্লাসগুলো ব্যবহার করলে আপনি ডেটা সংগ্রহের ইনিশিয়ালাইজেশন বিলম্বিত করতে পারবেন, এবং সেই সাথে প্রয়োজনীয় সময়ে ডেটা লোড করা হবে।
নিচে একটি উদাহরণ দেওয়া হলো যেখানে LazyList ব্যবহার করা হয়েছে:
import org.apache.commons.collections4.list.LazyList;
import java.util.List;
import java.util.ArrayList;
public class LazyCollectionExample {
public static void main(String[] args) {
List<String> list = LazyList.decorate(new ArrayList<String>(), new Factory<String>() {
@Override
public String create() {
return "Lazy Loaded Item";
}
});
// Initially, the list is empty
System.out.println("List before loading: " + list);
// Accessing an element, it will be lazily loaded
System.out.println("First item: " + list.get(0));
// List now contains a lazily loaded item
System.out.println("List after loading: " + list);
}
}
এখানে LazyList.decorate()
ব্যবহার করা হয়েছে, যা একটি ArrayList
কে Lazy List হিসেবে পরিণত করে। Factory
ইন্টারফেসের মাধ্যমে একটি ডিফল্ট আইটেম তৈরি করা হয় যখনই একটি নির্দিষ্ট ইনডেক্সে প্রথমবারের মতো কোনো ডেটা রিকোয়েস্ট করা হয়।
Lazy Collection অ্যাপাচি কমন্স কালেকশনস লাইব্রেরির একটি শক্তিশালী বৈশিষ্ট্য যা ডেটা লোডিংয়ের প্রক্রিয়াকে বিলম্বিত করে, শুধুমাত্র যখন প্রয়োজন হয় তখন ডেটা তৈরি হয়। এটি মেমরি ব্যবহারের দক্ষতা বৃদ্ধি এবং পারফরম্যান্স উন্নত করার জন্য গুরুত্বপূর্ণ একটি কৌশল। LazyList
এবং LazyMap
এর মাধ্যমে আপনি ডেটা সংগ্রহের ইনিশিয়ালাইজেশন বিলম্বিত করতে পারবেন, যা বড় বা জটিল ডেটা ব্যবস্থাপনায় সাহায্য করতে পারে।
Apache Commons Collections লাইব্রেরি ডেটা ম্যানিপুলেশনকে সহজ এবং শক্তিশালী করার জন্য নানা ধরনের ক্লাস এবং ফিচার সরবরাহ করে। এর মধ্যে একটি শক্তিশালী ফিচার হল Transformed Collections, যা আপনাকে একটি কালেকশনের উপাদানগুলির উপর কাস্টম ট্রান্সফরমেশন (যেমন মান পরিবর্তন) প্রয়োগ করার সুযোগ দেয়। আপনি এই ফিচারটি ব্যবহার করে একটি কালেকশনের প্রতিটি উপাদানকে একটি নির্দিষ্ট ফাংশন বা লজিকের মাধ্যমে ট্রান্সফর্ম করতে পারেন।
এটি ডেটা স্ট্রাকচারগুলির মধ্যে পরিবর্তন বা ট্রান্সফরমেশন করার জন্য অত্যন্ত উপকারী, যেমন যদি আপনি একটি List
এর সব উপাদানকে uppercase এ রূপান্তর করতে চান, বা একটি Map
এর মানগুলিকে কোনো নির্দিষ্ট ফর্ম্যাটে সাজাতে চান।
এই টিউটোরিয়ালে, আমরা দেখব কিভাবে Transformed Collections তৈরি করতে হয় এবং Transformer ফিচার ব্যবহার করে কাস্টম ট্রান্সফরমেশন প্রয়োগ করতে হয়।
Transformed Collections হল একটি বিশেষ ধরনের কালেকশন যেখানে প্রতিটি উপাদান একটি নির্দিষ্ট Transformer ক্লাস ব্যবহার করে ট্রান্সফর্ম বা রূপান্তরিত হয়। Transformer হল একটি ফাংশনাল ফিচার যা একটি ইনপুট (যেমন একটি মান বা অবজেক্ট) গ্রহণ করে এবং তাকে একটি নতুন আউটপুট মানে রূপান্তরিত করে।
আপনি Transformed Collections তৈরি করতে Transformer ক্লাসের ইমপ্লিমেন্টেশন ব্যবহার করতে পারেন। এতে আপনি আপনার ডেটার উপর কাস্টম ট্রান্সফরমেশন প্রয়োগ করতে পারেন, যেমন:
Transformer হল একটি Apache Commons Collections ক্লাস যা একটি ইনপুট মান (যেমন একটি অবজেক্ট) গ্রহণ করে এবং সেটিকে অন্য একটি আউটপুট মানে রূপান্তরিত করে। আপনি আপনার কাস্টম ট্রান্সফরমেশন ফাংশন তৈরি করতে Transformer ইন্টারফেস ইমপ্লিমেন্ট করতে পারেন।
import org.apache.commons.collections4.Transformer;
public class TransformerExample {
public static void main(String[] args) {
// Create a transformer to convert string to uppercase
Transformer<String, String> toUpperCaseTransformer = new Transformer<String, String>() {
@Override
public String transform(String input) {
return input.toUpperCase(); // Convert string to uppercase
}
};
// Use the transformer
String result = toUpperCaseTransformer.transform("hello world");
System.out.println(result); // Output: "HELLO WORLD"
}
}
এখানে:
এখন আমরা দেখব কিভাবে Transformed Collections তৈরি করতে হয়। Transformed Collection তৈরি করতে আমরা CollectionUtils অথবা ListUtils ক্লাস ব্যবহার করতে পারি, যা আপনার কালেকশন আইটেমগুলির উপর Transformer প্রয়োগ করবে এবং একটি নতুন কালেকশন রিটার্ন করবে।
import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.ListUtils;
import java.util.List;
import java.util.ArrayList;
public class TransformedCollectionExample {
public static void main(String[] args) {
// Create a list of strings
List<String> originalList = new ArrayList<>();
originalList.add("apple");
originalList.add("banana");
originalList.add("cherry");
// Create a transformer to convert strings to uppercase
Transformer<String, String> toUpperCaseTransformer = new Transformer<String, String>() {
@Override
public String transform(String input) {
return input.toUpperCase(); // Convert string to uppercase
}
};
// Apply transformer to the list
List<String> transformedList = ListUtils.transform(originalList, toUpperCaseTransformer);
// Print the transformed list
System.out.println("Transformed List: " + transformedList);
}
}
এখানে:
ListUtils.transform()
মেথড ব্যবহার করে মূল লিস্টের উপাদানগুলির উপর ট্রান্সফরমেশন প্রয়োগ করা হয়েছে।আউটপুট:
Transformed List: [APPLE, BANANA, CHERRY]
আপনি Map এর মানগুলির উপরও Transformer প্রয়োগ করতে পারেন। উদাহরণস্বরূপ, যদি আপনার একটি Map<String, Integer>
থাকে এবং আপনি মানগুলিকে দ্বিগুণ করতে চান, তবে আপনি নিম্নলিখিতভাবে কাজ করতে পারেন।
import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.MapUtils;
import java.util.Map;
import java.util.HashMap;
public class MapTransformedExample {
public static void main(String[] args) {
// Create a map of strings to integers
Map<String, Integer> originalMap = new HashMap<>();
originalMap.put("apple", 1);
originalMap.put("banana", 2);
originalMap.put("cherry", 3);
// Create a transformer to double the integer values
Transformer<Integer, Integer> doubleValueTransformer = new Transformer<Integer, Integer>() {
@Override
public Integer transform(Integer input) {
return input * 2; // Double the value
}
};
// Apply transformer to the map values
Map<String, Integer> transformedMap = MapUtils.transformValues(originalMap, doubleValueTransformer);
// Print the transformed map
System.out.println("Transformed Map: " + transformedMap);
}
}
এখানে:
আউটপুট:
Transformed Map: {apple=2, banana=4, cherry=6}
Transformed Collections একটি শক্তিশালী ফিচার যা Apache Commons Collections লাইব্রেরি সরবরাহ করে। এটি আপনাকে একটি কালেকশনের প্রতিটি উপাদানকে একটি নির্দিষ্ট Transformer এর মাধ্যমে ট্রান্সফর্ম করতে সহায়তা করে। আপনি List, Map বা অন্যান্য কালেকশনগুলিতে Transformer প্রয়োগ করে কাস্টম ট্রান্সফরমেশন করতে পারেন। এটি ডেটা ম্যানিপুলেশন এবং ফাংশনাল প্রোগ্রামিংয়ের জন্য একটি অত্যন্ত কার্যকরী টুল।
Apache Commons Collections লাইব্রেরি Factory Pattern এবং Lazy Initialization এর মতো ডিজাইন প্যাটার্ন সরবরাহ করে যা কোডের নমনীয়তা এবং কার্যকারিতা বাড়াতে সহায়ক। এই ডিজাইন প্যাটার্নগুলো বিশেষভাবে কাজে আসে যখন আপনি কোলেকশনে নতুন উপাদান তৈরি করতে চান অথবা যখন আপনি কোলেকশনের উপাদানগুলো কেবলমাত্র প্রয়োজনের সময় তৈরি করতে চান।
এই নিবন্ধে আমরা Factory Pattern এবং Lazy Initialization এর ব্যবহার এবং এদের কার্যকারিতা কিভাবে কাজ করে, তা নিয়ে আলোচনা করব।
Factory Pattern একটি কৃত্রিম ডিজাইন প্যাটার্ন যা অবজেক্ট তৈরি করার জন্য একটি নির্দিষ্ট factory method ব্যবহার করে। এই প্যাটার্নটির উদ্দেশ্য হল ক্লাসের ইনস্ট্যান্স তৈরি করার দায়িত্ব একটি আলাদা ক্লাসের উপর অর্পণ করা, যাতে ক্লাসের ব্যবহারকারীরা তার কনস্ট্রাকটরের পরিবর্তে একটি ফ্যাক্টরি মেথডের মাধ্যমে অবজেক্ট তৈরি করতে পারে।
Apache Commons Collections এ Factory Pattern ব্যবহার করা হয় নতুন কোলেকশন অবজেক্ট তৈরি করার জন্য, যেখানে আপনাকে কেবলমাত্র একটি ফ্যাক্টরি মেথডের মাধ্যমে কোলেকশন তৈরি করতে হবে।
import org.apache.commons.collections4.Factory;
import org.apache.commons.collections4.FactoryUtils;
import java.util.List;
import java.util.ArrayList;
public class FactoryPatternExample {
public static void main(String[] args) {
// Create a factory for creating new ArrayLists
Factory<List<String>> listFactory = FactoryUtils.instantiateFactory(ArrayList::new);
// Use the factory to create a new list
List<String> list = listFactory.create();
list.add("apple");
list.add("banana");
System.out.println("List: " + list);
}
}
এখানে:
FactoryUtils.instantiateFactory()
একটি factory তৈরি করে যা একটি new ArrayList<>() কনস্ট্রাকটরকে ফ্যাক্টরি মেথডে রূপান্তরিত করে।create()
মেথডটি কোলেকশন তৈরি করতে ব্যবহার করা হয় এবং সেই কোলেকশনে উপাদান যোগ করা হয়।আউটপুট:
List: [apple, banana]
এখানে Factory Pattern ব্যবহার করে নতুন ArrayList কোলেকশন তৈরি করা হয়েছে, যা স্বয়ংক্রিয়ভাবে Factory এর মাধ্যমে তৈরি করা হয়েছে।
Lazy Initialization একটি ডিজাইন প্যাটার্ন যেখানে কোনো অবজেক্ট বা মান কেবলমাত্র তখনই তৈরি করা হয় যখন সেটি প্রথমবার প্রয়োজন হয়। এটি সাধারণত কার্যকারিতা বৃদ্ধি করতে এবং অ্যাপ্লিকেশনের পারফরমেন্স উন্নত করতে ব্যবহৃত হয়, কারণ অবজেক্ট বা ডেটা কেবল তখনই তৈরি বা লোড করা হয় যখন তা আসলেই প্রয়োজন।
Apache Commons Collections এ Lazy Initialization ব্যবহার করা হয় যখন আপনি কোলেকশনের উপাদান তৈরি করতে চান, কিন্তু কেবলমাত্র সেই উপাদানটি ব্যবহৃত হওয়ার সময় তা তৈরি করবেন।
import org.apache.commons.collections4.map.LazyMap;
import org.apache.commons.collections4.Factory;
import org.apache.commons.collections4.FactoryUtils;
import java.util.Map;
public class LazyInitializationExample {
public static void main(String[] args) {
// Create a factory that creates an empty string for new keys
Factory<String> stringFactory = FactoryUtils.constantFactory("");
// Create a lazy map using the factory
Map<String, String> lazyMap = LazyMap.lazyMap(new java.util.HashMap<>(), stringFactory);
// Access a non-existent key, the value will be created lazily
System.out.println("Value for key 'apple': " + lazyMap.get("apple")); // Empty string will be created lazily
// Now, we can put a value for the key 'apple'
lazyMap.put("apple", "fruit");
// Access the value for key 'apple' again
System.out.println("Updated value for key 'apple': " + lazyMap.get("apple"));
}
}
এখানে:
LazyMap.lazyMap()
ব্যবহার করা হয়েছে, যা একটি নতুন HashMap
তৈরি করে এবং প্রতিটি নতুন কীর জন্য একটি factory ব্যবহার করে তার মান তৈরি করে।stringFactory
একটি ফ্যাক্টরি যা নতুন কী-এর জন্য একটি খালি স্ট্রিং ফেরত দেয়।আউটপুট:
Value for key 'apple':
Updated value for key 'apple': fruit
এখানে প্রথমবার "apple" কী-এর জন্য খালি স্ট্রিং তৈরি হয়েছে, কিন্তু দ্বিতীয়বার "apple" কী-এ আসল মান (যেমন "fruit") অ্যাসাইন করা হয়েছে।
আপনি যদি Factory Pattern এবং Lazy Initialization ব্যবহার করতে চান, তবে আপনাকে Apache Commons Collections লাইব্রেরি আপনার প্রোজেক্টে অন্তর্ভুক্ত করতে হবে। যদি আপনি Maven ব্যবহার করেন, তবে আপনার pom.xml ফাইলে নিম্নলিখিত ডিপেনডেন্সি যোগ করতে হবে:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.4</version>
</dependency>
এটি Apache Commons Collections লাইব্রেরি আপনার প্রোজেক্টে যোগ করবে, যার মাধ্যমে আপনি Factory Pattern, Lazy Initialization এবং অন্যান্য ফিচার ব্যবহার করতে পারবেন।
Factory Pattern এবং Lazy Initialization হল দুটি ডিজাইন প্যাটার্ন যা Apache Commons Collections লাইব্রেরি সরবরাহ করে। Factory Pattern অবজেক্ট তৈরির জন্য একটি ফ্যাক্টরি মেথড ব্যবহার করে, যেখানে Lazy Initialization কেবল তখনই অবজেক্ট তৈরি করে যখন তা প্রথমবার প্রয়োজন হয়। এই প্যাটার্নগুলি কোলেকশন ব্যবস্থাপনা এবং অবজেক্ট ম্যানিপুলেশনের জন্য অত্যন্ত কার্যকর এবং নমনীয় সমাধান সরবরাহ করে।
Apache Commons Collections লাইব্রেরি বিভিন্ন ইউটিলিটি এবং ক্লাস সরবরাহ করে যা ডেটা ম্যানিপুলেশন এবং সংগ্রহের কার্যকারিতা উন্নত করে। এর মধ্যে দুটি গুরুত্বপূর্ণ উপাদান হল Factory এবং Transformer। এই দুইটি সাধারণভাবে functional programming প্যাটার্নে ব্যবহৃত হয় এবং ডেটার উপর বিভিন্ন পরিবর্তন বা রূপান্তর করতে সহায়ক। Custom Factory এবং Transformer ব্যবহার করে আপনি আরও কাস্টমাইজড এবং ফ্লেক্সিবল ডেটা স্ট্রাকচার এবং ট্রান্সফরমেশন অপারেশন তৈরি করতে পারেন।
Factory একটি ডিজাইন প্যাটার্ন যা কোনো অবজেক্ট তৈরি করার জন্য ব্যবহৃত হয়। Apache Commons Collections এর মধ্যে Factory ইন্টারফেস রয়েছে, যা নতুন অবজেক্ট তৈরি করতে সহায়তা করে। আপনি একটি Custom Factory তৈরি করতে পারেন যাতে কোনো নির্দিষ্ট ধরনের অবজেক্ট তৈরি করা যায়।
Factory একটি জেনেরিক ইন্টারফেস যা একটি T টাইপের অবজেক্ট তৈরি করে। এর প্রধান মেথড হল:
public interface Factory<T> {
T create();
}
এখানে:
ধরা যাক, আপনি একটি String টাইপের অবজেক্ট তৈরি করতে একটি কাস্টম ফ্যাক্টরি তৈরি করতে চান।
import org.apache.commons.collections4.Factory;
import java.util.ArrayList;
public class CustomFactoryExample {
public static void main(String[] args) {
// Creating a custom factory to create new ArrayList objects
Factory<ArrayList<String>> factory = ArrayList::new;
// Using the factory to create a new ArrayList
ArrayList<String> list = factory.create();
// Adding some elements to the ArrayList
list.add("apple");
list.add("banana");
list.add("cherry");
// Print the list
System.out.println(list); // Output: [apple, banana, cherry]
}
}
এখানে:
আউটপুট:
[apple, banana, cherry]
এটি দেখাচ্ছে কিভাবে একটি Custom Factory ব্যবহার করে ArrayList তৈরি করা হলো এবং সেটির মধ্যে মান যোগ করা হলো।
Transformer একটি ইন্টারফেস যা একটি ইনপুট ভ্যালুর উপর রূপান্তর প্রক্রিয়া প্রয়োগ করে এবং একটি আউটপুট ভ্যালু প্রদান করে। Apache Commons Collections এ Transformer ইন্টারফেসটি functional programming প্যাটার্নে ব্যবহৃত হয় যেখানে একটি ইনপুট ডেটাকে নতুন আউটপুট ডেটায় রূপান্তর করা হয়।
Transformer একটি সাধারণ functional interface যা transform() মেথড সরবরাহ করে। এটি ইনপুট ভ্যালু নিয়ে সেটির উপর একটি নির্দিষ্ট রূপান্তর প্রক্রিয়া প্রয়োগ করে এবং আউটপুট ফেরত দেয়।
public interface Transformer<I, O> {
O transform(I input);
}
এখানে:
ধরা যাক, আমরা একটি List এর প্রতিটি স্ট্রিংকে বড় হাতের অক্ষরে রূপান্তর করতে চাই। এজন্য আমরা একটি কাস্টম Transformer তৈরি করব।
import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.CollectionUtils;
import java.util.Arrays;
import java.util.List;
public class CustomTransformerExample {
public static void main(String[] args) {
// Create a list of strings
List<String> words = Arrays.asList("apple", "banana", "cherry");
// Create a custom transformer to convert strings to uppercase
Transformer<String, String> transformer = new Transformer<String, String>() {
@Override
public String transform(String input) {
return input.toUpperCase();
}
};
// Use CollectionUtils to transform the list using the transformer
List<String> transformedWords = (List<String>) CollectionUtils.collect(words, transformer);
// Print the transformed list
System.out.println(transformedWords); // Output: [APPLE, BANANA, CHERRY]
}
}
এখানে:
আউটপুট:
[APPLE, BANANA, CHERRY]
এটি দেখাচ্ছে কিভাবে একটি Transformer ব্যবহার করে একটি List এর সকল আইটেমকে বড় হাতের অক্ষরে রূপান্তর করা যায়।
Factory এবং Transformer একসাথে ব্যবহার করা যেতে পারে একটি কাস্টম ডেটা স্ট্রাকচার তৈরি করতে। উদাহরণস্বরূপ, আপনি একটি List তৈরি করতে পারেন, তারপর সেই তালিকার উপাদানগুলির উপর রূপান্তর প্রক্রিয়া প্রয়োগ করতে পারেন।
import org.apache.commons.collections4.Factory;
import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.CollectionUtils;
import java.util.Arrays;
import java.util.List;
public class FactoryAndTransformerExample {
public static void main(String[] args) {
// Create a factory to create new ArrayList objects
Factory<List<String>> listFactory = ArrayList::new;
// Use the factory to create a new list
List<String> list = listFactory.create();
list.add("apple");
list.add("banana");
list.add("cherry");
// Create a transformer to convert strings to uppercase
Transformer<String, String> transformer = String::toUpperCase;
// Transform the list using the transformer
List<String> transformedList = (List<String>) CollectionUtils.collect(list, transformer);
// Print the transformed list
System.out.println(transformedList); // Output: [APPLE, BANANA, CHERRY]
}
}
এখানে:
আউটপুট:
[APPLE, BANANA, CHERRY]
এটি দেখায় কিভাবে Factory এবং Transformer একসাথে ব্যবহার করে একটি কাস্টম ডেটা স্ট্রাকচার তৈরি এবং রূপান্তর করা যায়।
Apache Commons Collections লাইব্রেরি Factory এবং Transformer ইন্টারফেস সরবরাহ করে যা object creation এবং functional transformation এর জন্য ব্যবহৃত হয়। Custom Factory এর মাধ্যমে আপনি ডেটার ধরন এবং কন্টেইনারের উপাদান তৈরির পদ্ধতি কাস্টমাইজ করতে পারেন, এবং Custom Transformer এর মাধ্যমে ডেটার উপর একটি নির্দিষ্ট রূপান্তর প্রক্রিয়া প্রয়োগ করতে পারেন। একসাথে ব্যবহার করে আপনি আরও শক্তিশালী এবং কাস্টমাইজড ডেটা স্ট্রাকচার এবং রূপান্তর প্রক্রিয়া তৈরি করতে পারেন, যা কোডের পুনঃব্যবহারযোগ্যতা, রক্ষণাবেক্ষণযোগ্যতা এবং কার্যক্ষমতা বাড়ায়।
common.read_more