Transformer এবং Closure

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

Apache Commons Collections লাইব্রেরি অনেক শক্তিশালী ইউটিলিটি এবং ডেটা স্ট্রাকচার সরবরাহ করে, যার মধ্যে Transformer এবং Closure দুটি গুরুত্বপূর্ণ কনসেপ্ট। এই দুটি ফিচার আপনাকে কোলেকশনগুলিতে কার্যকরীভাবে মান পরিবর্তন এবং প্রক্রিয়া চালানোর সুযোগ দেয়। চলুন, আমরা বিস্তারিতভাবে Transformer এবং Closure সম্পর্কে জানি এবং এগুলি কিভাবে ব্যবহার করা যায় তা দেখি।


১. Transformer কী?

Transformer একটি ফাংশনালিটি যা একটি কোলেকশনের উপাদানকে পরিবর্তন বা রূপান্তরিত করতে ব্যবহৃত হয়। আপনি একটি কোলেকশনের প্রতিটি উপাদানের উপর একটি নির্দিষ্ট কাজ করতে চান, যেমন কোনো মান পরিবর্তন বা একটি ফাংশন প্রয়োগ, তখন Transformer খুবই উপকারী।

Transformer সাধারণত org.apache.commons.collections4.Transformer ইন্টারফেস দ্বারা বাস্তবায়িত হয় এবং এটি একটি transform() মেথড প্রদান করে যা একটি ইনপুট অবজেক্ট নিয়ে তার উপর কাজ করে এবং আউটপুট প্রদান করে।

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

import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.transformer.ConstantTransformer;

public class TransformerExample {
    public static void main(String[] args) {
        // Define a transformer that always returns the same object
        Transformer<String, String> transformer = new ConstantTransformer("Hello, World!");

        // Apply the transformer to a string
        String result = transformer.transform("Some input");
        System.out.println("Transformed result: " + result); // Output will always be "Hello, World!"
    }
}

এখানে:

  • ConstantTransformer একটি Transformer ক্লাস যা একটি নির্দিষ্ট মান (এখানে "Hello, World!") রিটার্ন করে, এই মানের সাথে কিছু সম্পর্কিত না থাকা সত্ত্বেও।
  • transform() মেথড একটি ইনপুট গ্রহণ করে এবং সেটির উপর কার্যকরী কাজ করে আউটপুট প্রদান করে।

Transformer এর আরও ব্যবহার:

  • StringValueTransformer: এটি একটি ট্রান্সফরমার যা কোনো ইনপুটের স্ট্রিং রিপ্রেজেন্টেশন ফেরত দেয়।
  • ChainedTransformer: একাধিক ট্রান্সফরমারের একটি শৃঙ্খল তৈরি করতে সাহায্য করে, যা একের পর এক কার্যকরী হয়।

২. Closure কী?

Closure একটি ফাংশনালিটি যা একটি কোলেকশন বা ইটারেবল এর উপাদানগুলির উপর নির্দিষ্ট কাজ সম্পাদন করে, কিন্তু এটি কোনো মান ফেরত দেয় না। এটি একটি একক অ্যাকশন বা কার্যকলাপ সম্পাদন করতে ব্যবহৃত হয়। যেমন: কোন উপাদানকে পরিবর্তন করা, সেটি প্রিন্ট করা, বা অন্য কোন কার্যক্রম সম্পাদন করা। এটি সাধারণত org.apache.commons.collections4.Closure ইন্টারফেস দ্বারা বাস্তবায়িত হয়।

Closure কোলেকশনের প্রতিটি উপাদানের উপর একটি কাজ প্রয়োগ করে, কিন্তু এটি কোনো রিটার্ন ভ্যালু প্রদান করে না। আপনি যখন কোলেকশনের উপাদানগুলির উপর সাইড-এফেক্ট (যেমন পরিবর্তন করা বা প্রিন্ট করা) করতে চান, তখন Closure উপকারী।

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

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

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

public class ClosureExample {
    public static void main(String[] args) {
        // A collection of strings
        List<String> list = new ArrayList<>();
        list.add("apple");
        list.add("banana");
        list.add("cherry");

        // Define a closure that prints each item
        Closure<String> printClosure = item -> System.out.println(item);

        // Apply the closure to each element of the list
        CollectionUtils.forEach(list, printClosure);
    }
}

এখানে:

  • Closure ইন্টারফেসের মাধ্যমে একটি printClosure তৈরি করা হয়েছে, যা একটি স্ট্রিং কোলেকশনের প্রতিটি উপাদান প্রিন্ট করে।
  • CollectionUtils.forEach() মেথডটি কোলেকশনের প্রতিটি উপাদানকে প্রক্রিয়া করার জন্য ব্যবহার করা হয়।

Closure এর আরও ব্যবহার:

  • ExecutorClosure: একটি নির্দিষ্ট Runnable বা Callable কাজ করে একটি কোলেকশনের উপাদানগুলির উপর।
  • ChainedClosure: একাধিক ক্লোজারকে শৃঙ্খলে যুক্ত করে, যাতে একের পর এক ক্লোজার কার্যকরী হয়।

৩. Transformer এবং Closure এর মধ্যে পার্থক্য

Transformer এবং Closure এর মধ্যে কিছু মূল পার্থক্য রয়েছে:

  • Transformer: একটি মান রূপান্তর করে এবং একটি আউটপুট প্রদান করে। এটি সাধারণত কোনো কোলেকশনের প্রতিটি উপাদানকে পরিবর্তন করে এবং একটি নতুন মান প্রদান করে।
  • Closure: এটি কোনো মান রূপান্তর করে না, বরং কোনো নির্দিষ্ট কাজ সম্পাদন করে (যেমন প্রিন্ট করা, ম্যানিপুলেট করা, পরিবর্তন করা) এবং এটি কোনো আউটপুট প্রদান করে না।

৪. Transformer এবং Closure এর ব্যবহার

Transformer এবং Closure উভয়ই কোলেকশনগুলির উপর কাজ করতে ব্যবহৃত হয়, তবে ব্যবহারের উদ্দেশ্য কিছুটা ভিন্ন:

  • Transformer: যখন আপনি কোলেকশনের প্রতিটি উপাদানকে একটি নতুন মানে রূপান্তর করতে চান, তখন এটি ব্যবহার করুন।
  • Closure: যখন আপনি কোলেকশনের উপাদানগুলির উপর কোনো সাইড-এফেক্ট কাজ (যেমন প্রিন্টিং বা অন্য কোনো কার্যক্রম) করতে চান, তখন এটি ব্যবহার করুন।

উদাহরণ: Transformer এবং Closure একসাথে ব্যবহার

import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.Closure;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.transformer.TransformIterator;

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

public class TransformerClosureExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("apple");
        list.add("banana");
        list.add("cherry");

        // Create a transformer that converts strings to uppercase
        Transformer<String, String> toUpperCaseTransformer = String::toUpperCase;

        // Apply the transformer to each item in the list
        List<String> transformedList = new ArrayList<>();
        for (String item : list) {
            transformedList.add(toUpperCaseTransformer.transform(item));
        }

        // Create a closure that prints each item
        Closure<String> printClosure = item -> System.out.println(item);

        // Apply the closure to the transformed list
        CollectionUtils.forEach(transformedList, printClosure);
    }
}

এখানে:

  • প্রথমে একটি Transformer ব্যবহার করে প্রতিটি স্ট্রিংকে uppercase এ রূপান্তর করা হয়েছে।
  • পরে, একটি Closure ব্যবহার করে সেই রূপান্তরিত স্ট্রিং গুলি প্রিন্ট করা হয়েছে।

সারাংশ

Transformer এবং Closure Apache Commons Collections লাইব্রেরির দুটি গুরুত্বপূর্ণ কনসেপ্ট। Transformer কোলেকশনের উপাদানগুলির উপর কার্যকরী কাজ করে এবং একটি নতুন মান প্রদান করে, যেখানে Closure কোনো নির্দিষ্ট কাজ (যেমন প্রিন্ট করা বা পরিবর্তন করা) সম্পাদন করে এবং কোন মান ফেরত দেয় না। এই দুটি কনসেপ্ট কোলেকশনগুলির উপর আরও শক্তিশালী এবং নমনীয় কার্যকরী অপারেশন পরিচালনা করতে সহায়ক, এবং আপনাকে বিভিন্ন ডেটা ম্যানিপুলেশন কাজ দ্রুত এবং সহজে সম্পাদন করতে সাহায্য করে।

common.content_added_by

Transformer ইন্টারফেস এবং এর ব্যবহার

102
102

Apache Commons Collections লাইব্রেরি Transformer ইন্টারফেস সরবরাহ করে যা একটি functional transformation প্রদান করে। এটি একটি জেনেরিক ইন্টারফেস যা একটি ইনপুট ভ্যালু নিয়ে তার উপর একটি নির্দিষ্ট রূপান্তর প্রক্রিয়া প্রয়োগ করে এবং একটি আউটপুট ভ্যালু ফেরত দেয়। এই ইন্টারফেসটি সাধারণত map, filter, অথবা transform অপারেশনগুলোতে ব্যবহৃত হয়।

Transformer ইন্টারফেস মূলত input ভ্যালুর উপর transformation প্রক্রিয়া প্রয়োগ করে একটি নতুন output তৈরি করে। এটি functional programming ধারণার মতো কাজ করে যেখানে একটি অবজেক্ট বা ভ্যালুর উপর নির্দিষ্ট ফাংশন প্রয়োগ করা হয়।

১. Transformer ইন্টারফেসের ধারণা

Transformer একটি সাধারণ functional interface যা ইনপুট ভ্যালু নিয়ে একটি আউটপুট ভ্যালু তৈরি করার জন্য একটি transform() মেথড ডিফাইন করে। এটি ইনপুটের ধরণ ও আউটপুটের ধরণ একই হতে পারে বা ভিন্নও হতে পারে।

Transformer ইন্টারফেসের সিগনেচার:

public interface Transformer<I, O> {
    O transform(I input);
}

এখানে:

  • I: ইনপুট টাইপ।
  • O: আউটপুট টাইপ।
  • transform(I input): একটি মেথড যা ইনপুট গ্রহণ করে এবং আউটপুট ফেরত দেয়।

২. Transformer ইন্টারফেসের ব্যবহার

Transformer ইন্টারফেসটি সাধারণত map, filter বা transform অপারেশনগুলোতে ব্যবহার করা হয়, যেখানে ডেটা স্ট্রাকচারের উপাদানগুলো পরিবর্তন বা রূপান্তর করা হয়। এটি মূলত Java Collections বা Streams API এর মতো কনটেইনার থেকে ডেটা ট্রান্সফর্মেশন করার জন্য ব্যবহার করা যায়।

উদাহরণ: Transformer ব্যবহার করে String রূপান্তর

ধরা যাক, আমরা একটি String তালিকা থেকে প্রতিটি স্ট্রিংকে বড় হাতের অক্ষরে রূপান্তর করতে চাই। এর জন্য আমরা Transformer ইন্টারফেস ব্যবহার করতে পারি।

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

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

        // Create a transformer that converts string 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]
    }
}

এখানে:

  • Transformer<String, String> ইন্টারফেস ব্যবহার করে একটি transform() মেথড তৈরি করা হয়েছে যা একটি String কে বড় হাতের অক্ষরে রূপান্তর করে।
  • CollectionUtils.collect() মেথডটি transformer ব্যবহার করে লিস্টের প্রতিটি আইটেমকে রূপান্তর করে এবং একটি নতুন লিস্ট তৈরি করে।

আউটপুট:

[APPLE, BANANA, CHERRY]

৩. Transformer ব্যবহার করে Object রূপান্তর

আপনি Transformer ইন্টারফেস ব্যবহার করে জটিল অবজেক্টগুলির উপরও রূপান্তর প্রয়োগ করতে পারেন। যেমন, আপনি একটি Person অবজেক্টের age ফিল্ড পরিবর্তন করতে চাইছেন।

উদাহরণ: Object রূপান্তর

import org.apache.commons.collections4.Transformer;

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + "}";
    }
}

public class TransformerObjectExample {
    public static void main(String[] args) {
        Person person = new Person("John", 25);

        // Create a transformer that increases the age by 5 years
        Transformer<Person, Person> transformer = new Transformer<Person, Person>() {
            @Override
            public Person transform(Person input) {
                return new Person(input.getName(), input.getAge() + 5);
            }
        };

        // Apply the transformer to the person object
        Person transformedPerson = transformer.transform(person);

        // Print the transformed person
        System.out.println(transformedPerson);  // Output: Person{name='John', age=30}
    }
}

এখানে:

  • Transformer<Person, Person> ব্যবহার করে Person অবজেক্টে বয়স বাড়ানোর জন্য একটি ট্রান্সফর্মার তৈরি করা হয়েছে।
  • transform() মেথডে Person অবজেক্টের বয়স ৫ বছর বাড়িয়ে নতুন অবজেক্ট তৈরি করা হয়েছে।

আউটপুট:

Person{name='John', age=30}

৪. Transformer এর সুবিধা

  • Functional Transformation: আপনি কোনো ডেটা স্ট্রাকচার বা অবজেক্টের উপর সহজেই functional transformation প্রয়োগ করতে পারেন।
  • Decoupling: Transformer এক ধরনের decoupling তৈরি করে, কারণ আপনি সহজেই কোনো ডেটা স্ট্রাকচার বা অবজেক্টে পরিবর্তন করতে পারেন, যেখানে ডেটার মূল কনটেক্সট বা স্ট্রাকচার অপরিবর্তিত থাকে।
  • Reusability: একটি transformer ইন্টারফেস একবার লিখে বার বার ব্যবহার করা যায় বিভিন্ন ডেটা টাইপের জন্য।
  • Readability and Maintainability: Transformer কোডের পাঠযোগ্যতা এবং রক্ষণাবেক্ষণযোগ্যতা বাড়ায়, কারণ এটি ফাংশনাল প্রোগ্রামিং ধারায় ডেটার রূপান্তর প্রদানের সুযোগ দেয়।

৫. Transformer এর সাথে অন্যান্য Utilities

  • CollectionUtils.collect(): এটি একটি নির্দিষ্ট Transformer ব্যবহার করে একটি Collection এর উপাদানগুলোকে রূপান্তর করতে সাহায্য করে। এটি খুবই উপকারী যখন আপনাকে একটি লিস্ট বা সেটের উপর একই ধরনের রূপান্তর প্রক্রিয়া প্রয়োগ করতে হয়।

    উদাহরণ:

    List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
    Transformer<Integer, Integer> squareTransformer = number -> number * number;
    List<Integer> squaredNumbers = (List<Integer>) CollectionUtils.collect(numbers, squareTransformer);
    System.out.println(squaredNumbers);  // Output: [1, 4, 9, 16]
    

সারাংশ

Transformer ইন্টারফেস Apache Commons Collections লাইব্রেরির একটি গুরুত্বপূর্ণ অংশ, যা functional transformation এর মাধ্যমে ডেটার রূপান্তর করার সুবিধা দেয়। এটি সাধারণত map অথবা transform অপারেশনগুলোতে ব্যবহৃত হয়, যেখানে ডেটা সংগ্রহের উপাদানগুলোকে পরিবর্তন করা হয়। Transformer এর মাধ্যমে আপনি যে কোনো অবজেক্ট বা ডেটা স্ট্রাকচারে নির্দিষ্ট রূপান্তর প্রক্রিয়া প্রয়োগ করতে পারেন, যেমন স্ট্রিংকে ক্যাপিটালাইজ করা, বয়স পরিবর্তন করা, অথবা সংখ্যা স্কয়ার করা। এটি সহজ, কার্যকরী এবং পুনরায় ব্যবহারযোগ্য কোড লেখার সুযোগ দেয়।

common.content_added_by

Closure ইন্টারফেস ব্যবহার করে Function প্রয়োগ

111
111

Apache Commons Collections লাইব্রেরি Closure ইন্টারফেস প্রদান করে, যা একটি ফাংশনাল ইন্টারফেস হিসেবে কাজ করে, এবং এটি Java কোডে ডাটা স্ট্রাকচারগুলিতে অপারেশন প্রয়োগ করার জন্য ব্যবহৃত হয়। Closure ইন্টারফেস মূলত একটি ফাংশনাল স্টাইল ডেভেলপমেন্ট প্যাটার্ন অনুসরণ করে এবং এটি একটি একক execute() পদ্ধতির মাধ্যমে কার্যক্রম সম্পাদন করে।

এই লেখায়, আমরা Closure ইন্টারফেস কিভাবে ব্যবহার করে বিভিন্ন Collection বা Iterator তে ফাংশন প্রয়োগ করা যায়, তা দেখব।


Closure ইন্টারফেসের ভূমিকা

Closure ইন্টারফেসের উদ্দেশ্য হল একটি কার্যপ্রণালী (functionality) এক্সিকিউট (execute) করা যেটি কোনো ইনপুট (যেমন, একটি Object) নেয় এবং এর উপর কোনো অপারেশন (যেমন print, transform, update) প্রয়োগ করে। এটি বিশেষভাবে ব্যবহার হয় যখন আপনি একটি Iterator বা Collection এর প্রতিটি উপাদানের উপর নির্দিষ্ট একটি ফাংশন প্রয়োগ করতে চান।

Closure ইন্টারফেসে একমাত্র পদ্ধতি execute(T input) থাকে, যেখানে T হল ইনপুট প্যারামিটার (যে কোন অবজেক্ট)।


Closure ইন্টারফেসের উদাহরণ:

Apache Commons CollectionsClosure ইন্টারফেসের ব্যবহার মূলত ফাংশনালিটি প্রয়োগ করার জন্য হয়। নিচে এর ব্যবহার দেখানো হয়েছে।

Closure ইন্টারফেসের উদাহরণ:

import org.apache.commons.collections4.functors.Closure;
import org.apache.commons.collections4.functors.LambdaClosure;

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

public class ClosureExample {
    public static void main(String[] args) {
        // List of strings
        List<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Cherry");

        // Closure implementation using LambdaClosure
        Closure<String> printClosure = new LambdaClosure<>(fruit -> System.out.println(fruit));

        // Applying Closure on each item in the list
        for (String fruit : fruits) {
            printClosure.execute(fruit); // Execute closure for each fruit
        }
    }
}

এখানে:

  • LambdaClosure ব্যবহার করা হয়েছে, যা Closure ইন্টারফেসের একটি কাস্টম ইমপ্লিমেন্টেশন।
  • execute(fruit) পদ্ধতিটি প্রতিটি ফ্রুট (যেমন "Apple", "Banana") এর উপর System.out.println(fruit) কার্যপ্রণালী প্রয়োগ করবে।

আউটপুট:

Apple
Banana
Cherry

এখানে, প্রতিটি ফলের নাম প্রিন্ট করার জন্য Closure ব্যবহার করা হয়েছে।


Closure ইন্টারফেসের আরও উদাহরণ:

আপনি Collection বা Iterator এর উপর ফাংশন প্রয়োগ করতে পারেন, যেমন প্রতিটি উপাদানে কোন পরিবর্তন বা অপারেশন চালানো।

List তে Closure প্রয়োগ:

import org.apache.commons.collections4.functors.Closure;
import org.apache.commons.collections4.functors.LambdaClosure;

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

public class ClosureListExample {
    public static void main(String[] args) {
        // List of numbers
        List<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);

        // Closure implementation to double each number
        Closure<Integer> doubleClosure = new LambdaClosure<>(number -> System.out.println(number * 2));

        // Applying Closure on each item in the list
        for (Integer number : numbers) {
            doubleClosure.execute(number); // Execute closure to double the number
        }
    }
}

এখানে:

  • LambdaClosure ব্যবহার করে প্রতিটি সংখ্যার উপর double অপারেশন প্রয়োগ করা হয়েছে।

আউটপুট:

2
4
6

এখানে, প্রতিটি সংখ্যার উপর গুণ ২ করে প্রিন্ট করা হয়েছে।


IteratorUtils এবং Closure:

IteratorUtils এর সাথে Closure ব্যবহার করলে আপনি Iterator এর উপাদানগুলির উপর কার্যক্রম প্রয়োগ করতে পারেন।

Iterator ব্যবহার করে Closure প্রয়োগ:

import org.apache.commons.collections4.functors.Closure;
import org.apache.commons.collections4.IteratorUtils;
import org.apache.commons.collections4.functors.LambdaClosure;

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

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

        // Closure implementation to print each number
        Closure<Integer> printClosure = new LambdaClosure<>(number -> System.out.println(number));

        // Iterator from the list
        Iterator<Integer> iterator = numbers.iterator();

        // Apply closure using IteratorUtils
        IteratorUtils.forEach(iterator, printClosure);
    }
}

এখানে:

  • IteratorUtils.forEach(iterator, printClosure) ব্যবহার করে Iterator এর প্রতিটি উপাদান (যেমন ১, ২, ৩, ৪, ৫) এর উপর Closure কার্যপ্রণালী প্রয়োগ করা হয়েছে।

আউটপুট:

1
2
3
4
5

এখানে প্রতিটি উপাদান printClosure এর মাধ্যমে প্রিন্ট করা হয়েছে।


Closure এবং Collection Iteration:

Closure ব্যবহার করে আপনি Collection বা Iterator এর প্রতিটি উপাদানের উপর সহজেই ফাংশন প্রয়োগ করতে পারেন, যা খুবই সুবিধাজনক যখন আপনি একটি সুনির্দিষ্ট কাজের জন্য একাধিক উপাদানে একই অপারেশন প্রয়োগ করতে চান।

Collection Iteration Example using Closure:

import org.apache.commons.collections4.functors.Closure;
import org.apache.commons.collections4.functors.LambdaClosure;

import java.util.Arrays;
import java.util.Collection;

public class CollectionClosureExample {
    public static void main(String[] args) {
        // A collection of numbers
        Collection<Integer> numbers = Arrays.asList(10, 20, 30, 40);

        // Closure to increase each number by 5
        Closure<Integer> increaseByFiveClosure = new LambdaClosure<>(number -> System.out.println(number + 5));

        // Apply the closure to each element in the collection
        numbers.forEach(number -> increaseByFiveClosure.execute(number));
    }
}

এখানে:

  • LambdaClosure ব্যবহার করে Collection এর প্রতিটি উপাদান 5 বাড়ানোর জন্য Closure প্রয়োগ করা হয়েছে।

আউটপুট:

15
25
35
45

সারাংশ

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

common.content_added_by

CollectionUtils.transform এবং CollectionUtils.forAllDo

140
140

Apache Commons Collections লাইব্রেরি CollectionUtils ক্লাসটি বিভিন্ন ধরনের collection এর জন্য সহায়ক ইউটিলিটি মেথড প্রদান করে, যা ডেটা ম্যানিপুলেশন এবং প্রক্রিয়াকরণকে সহজ করে তোলে। এর মধ্যে দুটি গুরুত্বপূর্ণ মেথড হলো transform এবং forAllDo। এই মেথড দুটি কালেকশনের উপাদানগুলির উপর নির্দিষ্ট কাজ করতে ব্যবহার করা হয়, যেমন transformation এবং action অপারেশন।

CollectionUtils.transform

CollectionUtils.transform মেথডটি একটি collection এর উপাদানগুলির উপর একটি transformation প্রয়োগ করার জন্য ব্যবহৃত হয়। এটি একটি Function এর মাধ্যমে, প্রতিটি উপাদানকে রূপান্তর (transform) করে এবং ফলস্বরূপ একটি নতুন collection তৈরি করে।

Function হল একটি ইন্টারফেস যা একটি ইনপুট মানকে একটি আউটপুট মানে রূপান্তরিত করে। এটি একটি ফাংশনাল প্রোগ্রামিং কৌশল যা stream processing এর মতো কাজ করে।

Usage Example: CollectionUtils.transform

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

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

        // Define the transformer (convert each string to uppercase)
        Transformer<String, String> transformer = new Transformer<String, String>() {
            public String transform(String input) {
                return input.toUpperCase();
            }
        };

        // Apply transformation
        List<String> transformedList = (List<String>) CollectionUtils.collect(list, transformer);

        // Print the transformed list
        System.out.println("Transformed List: " + transformedList);
    }
}

Output:

Transformed List: [APPLE, BANANA, CHERRY]

ব্যাখ্যা:

  • CollectionUtils.collect() মেথডটি একটি Transformer ব্যবহার করে list এর সমস্ত উপাদানকে রূপান্তরিত করেছে (এই ক্ষেত্রে, প্রতিটি স্ট্রিংকে uppercase এ রূপান্তরিত করা হয়েছে)।
  • Transformer ইন্টারফেসটি একটি function এর মতো কাজ করে, যা ইনপুট (একটি স্ট্রিং) গ্রহণ করে এবং একটি আউটপুট (uppercase স্ট্রিং) প্রদান করে।

CollectionUtils.forAllDo

CollectionUtils.forAllDo মেথডটি একটি action প্রয়োগ করে প্রতিটি উপাদানকে এক্সিকিউট করতে ব্যবহৃত হয়। এটি Closure ইন্টারফেস ব্যবহার করে, যার মাধ্যমে আমরা কালেকশনের সমস্ত উপাদান উপর একটি নির্দিষ্ট কার্যক্রম (action) চালাতে পারি।

Closure হল একটি ফাংশনাল প্রোগ্রামিং কৌশল, যা একটি কার্যক্রমকে একটি প্রক্রিয়ায় (action) রূপান্তরিত করে এবং প্রতিটি উপাদানের উপর সেই কার্যক্রম প্রয়োগ করে।

Usage Example: CollectionUtils.forAllDo

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

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

        // Define the closure (print each element in the list)
        Closure<String> printClosure = new Closure<String>() {
            public void execute(String input) {
                System.out.println(input);
            }
        };

        // Apply the closure to all elements
        CollectionUtils.forAllDo(list, printClosure);
    }
}

Output:

apple
banana
cherry

ব্যাখ্যা:

  • CollectionUtils.forAllDo() মেথডটি Closure ব্যবহার করে প্রতিটি উপাদানের উপর নির্দিষ্ট action (এই ক্ষেত্রে, প্রতিটি উপাদানকে প্রিন্ট করা) চালায়।
  • Closure ইন্টারফেসটি একটি action হিসাবে কাজ করে, যা একটি প্রক্রিয়া বা কার্যকলাপ (এই ক্ষেত্রে, স্ট্রিং আউটপুট) নির্দিষ্ট করে এবং সেটি সব উপাদানের উপর কার্যকর হয়।

Comparison: transform vs forAllDo

FeaturetransformforAllDo
PurposeUsed to transform each element in a collection.Used to apply an action to each element.
OutputReturns a new collection with transformed elements.Performs an action on each element, no return value.
UsageUsed when you need to change the elements of a collection (e.g., map).Used when you need to perform a side effect (e.g., print, modify external state).
InterfaceUses Transformer (a function).Uses Closure (a procedure).
ExampleTransforming a list of strings to uppercase.Printing each element of a collection.

When to Use transform vs forAllDo

  • Use transform when you want to change or transform the data in a collection. It creates a new collection with transformed elements. For example, when you need to apply a function (e.g., converting strings to uppercase or applying a mathematical function).
  • Use forAllDo when you need to apply an action (side effect) on each element in a collection. It does not return anything and is typically used when you want to perform operations like printing, updating external variables, or interacting with other systems.

  • CollectionUtils.transform এবং CollectionUtils.forAllDo হল দুটি অত্যন্ত শক্তিশালী এবং কার্যকরী মেথড যা Apache Commons Collections লাইব্রেরি থেকে পাওয়া যায়। transform মেথডটি কালেকশন উপাদানগুলির উপর ট্রান্সফরমেশন প্রয়োগ করে এবং একটি নতুন কালেকশন তৈরি করে, যেখানে forAllDo মেথডটি প্রতিটি উপাদানের উপর একটি action প্রয়োগ করে, যেমন প্রিন্ট করা বা কোন বৈশিষ্ট্য পরিবর্তন করা।
  • এগুলি Java কালেকশনের সঙ্গে কাজ করার সময় আরও নমনীয়তা এবং কার্যকারিতা প্রদান করে, যা আপনার প্রজেক্টের ডেটা ম্যানিপুলেশন প্রক্রিয়াকে সহজ এবং কার্যকরী করে তোলে।
common.content_added_by

Custom Transformer এবং Closure তৈরি

110
110

অ্যাপাচি কমন্স কালেকশনস (Apache Commons Collections) একটি শক্তিশালী লাইব্রেরি যা ডেটা স্ট্রাকচার ম্যানিপুলেশনকে সহজ এবং কার্যকরী করে তোলে। এতে Transformer এবং Closure এর মতো কাস্টম ফাংশনালিটি ব্যবহারের সুবিধা রয়েছে, যা ডেটা স্ট্রাকচারে অপারেশন করার জন্য অত্যন্ত উপকারী। Transformer ব্যবহার করে আপনি ডেটা স্ট্রাকচারের উপাদানগুলিকে রূপান্তর করতে পারেন, এবং Closure ব্যবহার করে আপনি একটি ফাংশন বা অপারেশন নির্দিষ্ট ডেটা উপাদানগুলির উপর কার্যকরী করতে পারেন।

এখানে আমরা Custom Transformer এবং Closure তৈরি করার পদ্ধতি বিস্তারিতভাবে আলোচনা করব।


1. Custom Transformer তৈরি করা


Transformer একটি Function এর মতো কাজ করে, যা ইনপুট ডেটা থেকে আউটপুট ডেটা তৈরি করে। এটি সাধারণত একটি অবজেক্টের উপর একটি নির্দিষ্ট পরিবর্তন বা রূপান্তর প্রক্রিয়া কার্যকর করার জন্য ব্যবহৃত হয়।

Custom Transformer কিভাবে কাজ করে?

  • Transformer একটি ফাংশনাল ইন্টারফেস যা একটি ইনপুট অবজেক্ট গ্রহণ করে এবং একটি আউটপুট অবজেক্ট প্রদান করে।
  • আপনি এটি কাস্টমাইজ করে নিজের প্রোজেক্টের জন্য নির্দিষ্ট রূপান্তর অপারেশন তৈরি করতে পারেন।

Custom Transformer তৈরি করার উদাহরণ:

ধরা যাক, আমাদের একটি List আছে, এবং আমরা চাই সমস্ত স্ট্রিংয়ের প্রথম অক্ষরকে বড় অক্ষরে রূপান্তর করতে।

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 convert first letter to uppercase
        Transformer<String, String> transformer = new Transformer<String, String>() {
            @Override
            public String transform(String input) {
                if (input == null || input.isEmpty()) {
                    return input;
                }
                // Capitalizing the first letter of the string
                return input.substring(0, 1).toUpperCase() + input.substring(1);
            }
        };

        // Apply the transformer to the list
        List<String> transformedList = ListUtils.transformedList(list, transformer);

        // Print the transformed list
        System.out.println(transformedList);  // Output: [Apple, Banana, Orange]
    }
}

এখানে:

  • Transformer ইন্টারফেসের মাধ্যমে একটি কাস্টম রূপান্তর তৈরি করা হয়েছে যা String এর প্রথম অক্ষরকে বড় অক্ষরে রূপান্তর করে।
  • ListUtils.transformedList() পদ্ধতি ব্যবহার করে রূপান্তরটি তালিকায় প্রয়োগ করা হয়েছে।

2. Custom Closure তৈরি করা


Closure হল একটি Runnable এর মতো কাজ করে যা নির্দিষ্ট কাজ বা অপারেশন একটি ডেটা স্ট্রাকচারের উপাদানগুলির উপর সম্পাদন করে। Closure সাধারণত একটি এক্সপ্লিসিট রিটার্ন ভ্যালু ছাড়াই একটি অপারেশন সম্পন্ন করতে ব্যবহৃত হয়।

Custom Closure কিভাবে কাজ করে?

  • Closure সাধারণত একটি এক্সিকিউটেবল ব্লক বা ফাংশন হিসেবে কাজ করে, যা নির্দিষ্ট অপারেশনগুলো সম্পাদন করে।
  • এটি forEach বা apply এর মতো ফাংশনাল অপারেশনগুলির জন্য উপকারী।

Custom Closure তৈরি করার উদাহরণ:

ধরা যাক, আমাদের একটি List আছে, এবং আমরা প্রতিটি উপাদানের উপর একটি কাস্টম অপারেশন (যেমন স্ট্রিংয়ের শেষে একটি বিশেষ চিহ্ন যোগ করা) সম্পাদন করতে চাই।

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 a special character to each element
        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 ইন্টারফেসটি একটি অপারেশন হিসাবে তৈরি করা হয়েছে যা প্রতিটি স্ট্রিংয়ের শেষে ! চিহ্ন যোগ করবে।
  • CollectionUtils.forEach() পদ্ধতি ব্যবহার করে কাস্টম ক্লোজারটি তালিকার উপাদানগুলির উপর কার্যকরী করা হয়েছে।

3. Custom Transformer এবং Closure এর ব্যবহারকারী কেস


কেস ১: ডেটা ফিল্টারিং এবং রূপান্তর

ধরা যাক, আমাদের একটি তালিকা রয়েছে এবং আমরা এই তালিকার সব স্ট্রিংয়ের মধ্যে "apple" শব্দটি ফিল্টার করতে চাই, এবং তারপর বাকিগুলির প্রথম অক্ষর বড় করতে চাই।

import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.Closure;
import org.apache.commons.collections4.ListUtils;
import org.apache.commons.collections4.CollectionUtils;

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

public class DataFilterAndTransform {
    public static void main(String[] args) {
        // Create a list of strings
        List<String> list = Arrays.asList("apple", "banana", "orange", "apple pie");

        // Create a 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);
            }
        };

        // Create a closure to filter out "apple" from the list
        Closure<String> filterClosure = new Closure<String>() {
            @Override
            public void execute(String input) {
                if (!input.contains("apple")) {
                    // Apply the transformer to the string and print it
                    String transformed = transformer.transform(input);
                    System.out.println(transformed);
                }
            }
        };

        // Apply the closure to filter and transform the list
        CollectionUtils.forEach(list, filterClosure);
    }
}

এখানে:

  • প্রথমে apple শব্দগুলো ফিল্টার করা হয়েছে, এবং তারপর transformer দিয়ে বাকিগুলির প্রথম অক্ষর বড় করা হয়েছে।
  • Closure এবং Transformer এর কম্বিনেশন ব্যবহার করে ডেটা ফিল্টারিং এবং ট্রান্সফরমেশন কার্যকর করা হয়েছে।

সারাংশ


Apache Commons CollectionsTransformer এবং Closure তৈরি করার মাধ্যমে আপনি ডেটা স্ট্রাকচারগুলির উপর কাস্টম অপারেশন বা রূপান্তর কার্যকর করতে পারেন। Transformer ইনপুট ডেটাকে আউটপুট ডেটায় রূপান্তর করে, এবং Closure নির্দিষ্ট কাজ বা অপারেশন ডেটার উপাদানগুলির উপর প্রয়োগ করে। এই দুটি শক্তিশালী ইউটিলিটি ক্লাস ব্যবহার করে আপনি জাভা প্রোগ্রামিংয়ে উন্নত ডেটা ম্যানিপুলেশন অপারেশন তৈরি করতে পারেন।

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

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

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

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