Functors এবং Predicates এর উন্নত ব্যবহার

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

Apache Commons Collections লাইব্রেরিতে Functors এবং Predicates ডাটা স্ট্রাকচার এবং কোডের কার্যপ্রণালী (functional behavior) উন্নত করার জন্য শক্তিশালী টুল হিসেবে কাজ করে। এগুলি অবজেক্ট বা কালেকশন এর উপর কার্যপ্রণালী প্রয়োগে সহায়তা করে, যেমন ফিল্টারিং, ট্রান্সফরমেশন, এবং শর্তাবলী অনুসরণ

Functors এবং Predicates কি?

  1. Functor:
    • Functor একটি functional object বা ক্লাস যা কিছু কাজ বা কার্যপ্রণালী সম্পাদন করে। এটি সাধারণত কোনো প্যারামিটার গ্রহণ করে এবং একটি নির্দিষ্ট কার্যক্রম সম্পাদন করে।
    • Apache Commons CollectionsFunctor একটি functional interface হিসেবে কাজ করে যা transform বা apply ধরনের কার্যপ্রণালী সম্পাদন করতে পারে।
  2. Predicate:
    • Predicate একটি ফাংশনাল ইন্টারফেস যা কোনো অবজেক্টের উপর শর্ত প্রয়োগ করতে ব্যবহৃত হয়। এটি একটি Boolean মান ফেরত দেয়, অর্থাৎ একটি শর্ত পালন করবে কিনা তা পরীক্ষা করে।
    • সাধারণত Predicate ব্যবহার করা হয় filtering বা searching অপারেশনগুলিতে।

Functor এর উন্নত ব্যবহার

Apache Commons CollectionsFunctor মূলত Transformer ইন্টারফেসের মাধ্যমে কার্যকরী হয়, যা কোন ইনপুট গ্রহণ করে এবং তার উপর একটি ট্রান্সফর্মেশন প্রয়োগ করে।

Functor Example:

import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.functors.TransformerUtils;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class FunctorExample {
    public static void main(String[] args) {
        // List of strings
        List<String> fruits = Arrays.asList("apple", "banana", "cherry");

        // Functor for transforming to uppercase
        Transformer<String, String> toUpperCaseTransformer = TransformerUtils.constantTransformer("UPPER");

        // Apply transformer to each element
        List<String> transformed = fruits.stream()
                .map(toUpperCaseTransformer::transform)
                .collect(Collectors.toList());

        System.out.println(transformed);  // Output: [UPPER, UPPER, UPPER]
    }
}

এখানে:

  • Transformer ইন্টারফেস ব্যবহার করে আমরা একটি Functor তৈরি করেছি যা একটি transform কার্যক্রম সম্পাদন করে (যেমন, সব ফ্রুটের নাম uppercase এ রূপান্তর করা)।

Predicate এর উন্নত ব্যবহার

Predicate ব্যবহার করে আপনি শর্ত প্রমাণ করতে বা উপাদান ফিল্টার করতে পারেন। Predicate ব্যবহৃত হয় select() মেথডে, যা একটি কালেকশনের উপর শর্ত অনুযায়ী ফিল্টার প্রয়োগ করতে সহায়ক।

Predicate Example:

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

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

public class PredicateExample {
    public static void main(String[] args) {
        // List of strings
        List<String> fruits = Arrays.asList("apple", "banana", "cherry");

        // Predicate to check if the string starts with 'b'
        Predicate<String> startsWithB = new Predicate<String>() {
            @Override
            public boolean evaluate(String fruit) {
                return fruit.startsWith("b");
            }
        };

        // Filter list using Predicate
        List<String> filteredFruits = (List<String>) CollectionUtils.select(fruits, startsWithB);

        System.out.println(filteredFruits);  // Output: [banana]
    }
}

এখানে:

  • Predicate ইন্টারফেস ব্যবহার করে একটি শর্ত তৈরি করা হয়েছে যা banana এর মতো "b" দিয়ে শুরু হওয়া ফলগুলো ফিল্টার করবে।
  • CollectionUtils.select() ফাংশন ব্যবহার করে ফিল্টারিং প্রক্রিয়া সম্পাদন করা হয়েছে।

Functors এবং Predicates এর উন্নত ব্যবহারের বিভিন্ন ক্ষেত্র:

  1. Collection Filtering:
    • Predicate এবং Functor ব্যবহার করে আপনি একটি কালেকশনের উপাদানগুলির উপর শর্ত প্রয়োগ করতে পারেন এবং শুধুমাত্র সেই উপাদানগুলিই নির্বাচন করতে পারেন যেগুলি শর্তে মেলে। এটি সাধারণত filtering অপারেশনগুলোতে ব্যবহৃত হয়।
  2. Map Transformation:
    • Functor ব্যবহার করে ম্যাপের উপাদানগুলির উপর ট্রান্সফরমেশন প্রয়োগ করা যায়, যেমন value এর ওপর পরিবর্তন বা key-এর উপর কোনো পরিবর্তন।
  3. Predicate and Functor Chain:
    • আপনি একাধিক Predicate এবং Functor একত্রে ব্যবহার করে জটিল শর্ত এবং কার্যপ্রণালী প্রয়োগ করতে পারেন। যেমন একাধিক শর্ত পূর্ণ হলে আপনি ফিল্টারিং বা ট্রান্সফরমেশন কার্যকরী করতে পারেন।

Functors এবং Predicates এর উন্নত ব্যবহার উদাহরণ:

Multiple Predicates with and() এবং or():

Predicate এর মধ্যে একাধিক শর্ত যোগ করতে আপনি and() এবং or() মেথড ব্যবহার করতে পারেন, যা একাধিক শর্ত সংযুক্ত করতে সহায়তা করে।

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

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

public class AdvancedPredicateExample {
    public static void main(String[] args) {
        // List of strings
        List<String> fruits = Arrays.asList("apple", "banana", "cherry", "blueberry");

        // Predicate to check if the string starts with 'b'
        Predicate<String> startsWithB = fruit -> fruit.startsWith("b");

        // Predicate to check if the string has more than 5 characters
        Predicate<String> moreThanFiveChars = fruit -> fruit.length() > 5;

        // Combine the predicates using 'and' (both conditions must be true)
        Predicate<String> combinedPredicate = startsWithB.and(moreThanFiveChars);

        // Filter list using combined predicate
        List<String> filteredFruits = (List<String>) CollectionUtils.select(fruits, combinedPredicate);

        System.out.println(filteredFruits);  // Output: [banana, blueberry]
    }
}

এখানে:

  • and() মেথড ব্যবহার করে দুটি শর্তকে একত্রে ব্যবহার করা হয়েছে, যেখানে শুধুমাত্র "b" দিয়ে শুরু হওয়া এবং ৫টির বেশি অক্ষরের ফলগুলো ফিল্টার করা হয়েছে।

Functor এবং Predicate এর মধ্যে পার্থক্য:

CriteriaFunctorPredicate
PurposePerforms a transformation on dataEvaluates a condition (returns boolean)
Return TypeTransforms data into another formReturns a boolean (true/false)
Use CaseUsed for transforming data (e.g., changing format)Used for filtering or testing conditions
Common Methodstransform()evaluate()

সারাংশ

Functors এবং Predicates হল Apache Commons Collections এর দুইটি শক্তিশালী ফিচার, যা Java Collections Framework এর মাধ্যমে কার্যপ্রণালী প্রয়োগ এবং ডাটা ম্যানিপুলেশনকে আরও কার্যকরী করে তোলে। Functor ব্যবহার করে আপনি ডাটা ট্রান্সফরমেশন করতে পারেন, যেমন মান পরিবর্তন বা অন্য কোনো অপারেশন। অন্যদিকে, Predicate ব্যবহার করে আপনি কালেকশনের উপাদানগুলির উপর শর্ত প্রয়োগ করে ফিল্টারিং এবং শর্ত যাচাই করতে পারেন। এই দুটি ফিচার কমপ্লেক্স ডাটা ম্যানিপুলেশন ও অপারেশনগুলো সহজভাবে বাস্তবায়ন করতে সাহায্য করে।

common.content_added_by

PredicateUtils এর উন্নত ব্যবহার

130
130

Apache Commons Collections লাইব্রেরির PredicateUtils ক্লাসটি বিভিন্ন Predicate অপারেশন তৈরি করার জন্য সহায়ক ইউটিলিটি মেথড সরবরাহ করে। Predicate একটি ফাংশনাল প্রোগ্রামিং কৌশল যা একটি ইনপুট গ্রহণ করে এবং একটি বুলিয়ান মান (true/false) রিটার্ন করে, যা শর্ত নির্ধারণ করে। PredicateUtils ক্লাসটি এই predicates তৈরি ও কম্বাইন করার কাজকে সহজ করে তোলে, এবং collection-এর উপাদানগুলিতে শর্ত প্রয়োগ করার জন্য একটি শক্তিশালী টুল সরবরাহ করে।

এই পোস্টে আমরা PredicateUtils এর বিভিন্ন উন্নত ব্যবহার কৌশল নিয়ে আলোচনা করব এবং দেখব কীভাবে আপনি একাধিক predicates কম্বাইন বা ফিল্টার করতে পারেন।


PredicateUtils এর বৈশিষ্ট্য এবং কার্যকারিতা

PredicateUtils ক্লাসে কিছু খুবই শক্তিশালী মেথড রয়েছে যা আপনাকে predicate তৈরি, একাধিক predicate একসাথে কম্বাইন এবং অন্যান্য ফাংশনাল শর্ত প্রয়োগে সহায়তা করে। এর কিছু প্রধান বৈশিষ্ট্য:

  1. allPredicate(): একটি নতুন predicate তৈরি করে যা সমস্ত উপাদানের জন্য সত্য হয়।
  2. anyPredicate(): একটি নতুন predicate তৈরি করে যা যে কোন উপাদানের জন্য সত্য হতে পারে।
  3. not(): একটি predicate এর বিপরীত শর্ত তৈরি করে।
  4. and(): দুটি বা ততোধিক predicate কে একত্রে যুক্ত করে একটি যৌথ শর্ত তৈরি করে।
  5. or(): দুটি বা ততোধিক predicate কে একত্রে যুক্ত করে একটি যে কোন শর্তের ভিত্তিতে সত্য হয় এমন শর্ত তৈরি করে।

PredicateUtils এর প্রধান মেথড

  1. allPredicate(): সমস্ত উপাদানের জন্য সত্য হবে এমন একটি predicate তৈরি করা।
    • উদাহরণস্বরূপ, আপনি একটি predicate তৈরি করতে পারেন যা সকল উপাদানের জন্য সত্য হবে।
  2. anyPredicate(): কোনো একটি উপাদান সত্য হলে, শর্ত পাস করবে এমন একটি predicate তৈরি করা।
    • উদাহরণস্বরূপ, আপনি এমন একটি predicate তৈরি করতে পারেন যা একটি শর্তে true রিটার্ন করবে যদি যেকোনো একটি উপাদান সত্য হয়।
  3. not(): একটি predicate এর বিপরীত শর্ত তৈরি করা।
    • উদাহরণস্বরূপ, আপনি একটি predicate তৈরি করতে পারেন যা একটি শর্তে false রিটার্ন করবে যদি প্রাথমিক শর্তটি true হয়।
  4. and(): দুটি বা ততোধিক predicate এর যৌথ শর্ত তৈরি করা।
    • উদাহরণস্বরূপ, দুটি predicate এর শর্ত যদি and কম্বাইন করা হয়, তবে দুটি শর্তই সত্য হতে হবে।
  5. or(): দুটি বা ততোধিক predicate এর যৌথ শর্ত তৈরি করা, যেখানে যে কোনো একটি শর্ত সত্য হলে, পুরো predicate সত্য হবে।

উন্নত উদাহরণ: PredicateUtils এর ব্যবহার

1. allPredicate() উদাহরণ:

allPredicate() মেথডটি একটি predicate তৈরি করে যা নিশ্চিত করে যে সমস্ত উপাদান সেই শর্তে পাস করবে।

import org.apache.commons.collections4.Predicate;
import org.apache.commons.collections4.PredicateUtils;

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

public class PredicateUtilsExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(2, 4, 6, 8, 10);

        // Create a predicate that checks if all numbers are even
        Predicate<Integer> allEven = PredicateUtils.allPredicate(new Predicate<Integer>() {
            @Override
            public boolean evaluate(Integer number) {
                return number % 2 == 0;  // Check if number is even
            }
        });

        // Check if all numbers are even
        boolean result = true;
        for (Integer number : numbers) {
            if (!allEven.evaluate(number)) {
                result = false;
                break;
            }
        }

        System.out.println("All numbers are even: " + result); // Output: true
    }
}

ব্যাখ্যা:

  • এখানে, PredicateUtils.allPredicate() একটি predicate তৈরি করছে যা নিশ্চিত করে যে প্রতিটি উপাদান even (যুগল) হতে হবে।
  • allEven.evaluate() মেথডটি প্রতিটি উপাদান যাচাই করে এবং যদি কোনো এক উপাদান শর্ত পূরণ না করে তবে এটি false রিটার্ন করবে।

2. anyPredicate() উদাহরণ:

anyPredicate() মেথডটি একটি predicate তৈরি করে যা কোনো একটি উপাদান শর্ত পূর্ণ করলে তা সত্য হবে।

import org.apache.commons.collections4.Predicate;
import org.apache.commons.collections4.PredicateUtils;

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

public class PredicateUtilsExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 3, 5, 7, 10);

        // Create a predicate that checks if any number is greater than 5
        Predicate<Integer> anyGreaterThanFive = PredicateUtils.anyPredicate(new Predicate<Integer>() {
            @Override
            public boolean evaluate(Integer number) {
                return number > 5;  // Check if number is greater than 5
            }
        });

        // Check if any number is greater than 5
        boolean result = false;
        for (Integer number : numbers) {
            if (anyGreaterThanFive.evaluate(number)) {
                result = true;
                break;
            }
        }

        System.out.println("Any number is greater than 5: " + result); // Output: true
    }
}

ব্যাখ্যা:

  • anyPredicate() একটি predicate তৈরি করছে যা নিশ্চিত করে যে কোনো একটি উপাদান যদি ৫ এর বেশি হয় তবে এটি সত্য রিটার্ন করবে।
  • এখানে anyGreaterThanFive.evaluate() মেথডটি উপাদান যাচাই করে এবং যদি কোনো একটি উপাদান শর্ত পূর্ণ করে, তাহলে এটি সত্য রিটার্ন করবে।

3. and() উদাহরণ:

and() মেথডটি দুটি predicate একত্রে যুক্ত করে একটি যৌথ শর্ত তৈরি করে। দুটি শর্তই পূর্ণ হতে হবে।

import org.apache.commons.collections4.Predicate;
import org.apache.commons.collections4.PredicateUtils;

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

public class PredicateUtilsExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(2, 4, 6, 7, 10);

        // Create two predicates: check if number is even and greater than 5
        Predicate<Integer> isEven = new Predicate<Integer>() {
            @Override
            public boolean evaluate(Integer number) {
                return number % 2 == 0;  // Check if number is even
            }
        };

        Predicate<Integer> greaterThanFive = new Predicate<Integer>() {
            @Override
            public boolean evaluate(Integer number) {
                return number > 5;  // Check if number is greater than 5
            }
        };

        // Combine the predicates using and()
        Predicate<Integer> isEvenAndGreaterThanFive = PredicateUtils.and(isEven, greaterThanFive);

        // Check if any number satisfies both conditions
        for (Integer number : numbers) {
            if (isEvenAndGreaterThanFive.evaluate(number)) {
                System.out.println(number + " satisfies both conditions");
            }
        }
    }
}

Output:

6 satisfies both conditions
10 satisfies both conditions

ব্যাখ্যা:

  • এখানে and() মেথডটি দুটি predicate (একটি even চেক এবং অন্যটি greater than 5 চেক) একত্রে ব্যবহার করছে।
  • শুধুমাত্র 6 এবং 10 শর্ত পূর্ণ করেছে, কারণ তাদের উভয় শর্তই পূর্ণ হয়েছে।

4. or() উদাহরণ:

or() মেথডটি দুটি predicate একত্রে যুক্ত করে একটি যৌথ শর্ত তৈরি করে, যেখানে যেকোনো একটি শর্ত পূর্ণ হলেই তা সত্য হবে।

import org.apache.commons.collections4.Predicate;
import org.apache.commons.collections4.PredicateUtils;

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

public class PredicateUtilsExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 3, 5, 7, 10);

        // Create two predicates: check if number is even or greater than 5
        Predicate<Integer> isEven = new Predicate<Integer>() {
            @Override
            public boolean evaluate(Integer number) {
                return number % 2 == 0;  // Check if number is even
            }
        };

        Predicate<Integer> greaterThanFive = new Predicate<Integer>() {
            @Override
            public boolean evaluate(Integer number) {
                return number > 5;  // Check if number is greater than 5
            }
        };

        // Combine the predicates using or()
        Predicate<Integer> isEvenOrGreaterThanFive = PredicateUtils.or(isEven, greaterThanFive);

        // Check if any number satisfies at least one condition
        for (Integer number : numbers) {
            if (isEvenOrGreaterThanFive.evaluate(number)) {
                System.out.println(number + " satisfies at least one condition");
            }
        }
    }
}

Output:

1 satisfies at least one condition
3 satisfies at least one condition
5 satisfies at least one condition
7 satisfies at least one condition
10 satisfies at least one condition

ব্যাখ্যা:

  • এখানে or() মেথডটি দুটি predicate (একটি even চেক এবং অন্যটি greater than 5 চেক) একত্রে ব্যবহার করছে।
  • সমস্ত উপাদানগুলির মধ্যে কমপক্ষে একটি শর্ত পূর্ণ হয়েছে, তাই or() শর্ত পূর্ণ করেছে।

PredicateUtils Apache Commons Collections লাইব্রেরির একটি শক্তিশালী ক্লাস যা বিভিন্ন predicate অপারেশন এবং তাদের কম্বিনেশন তৈরি করতে সহায়তা করে। PredicateUtils এর মেথড যেমন allPredicate(), anyPredicate(), and(), এবং or() আপনাকে একাধিক শর্তের ভিত্তিতে কালেকশনের উপাদানগুলো ফিল্টার করতে সহায়তা করে। এটি আপনাকে ফাংশনাল শর্তগুলির প্রয়োগ ও ম্যানিপুলেশন সহজ এবং কার্যকরীভাবে করতে সহায়তা করে।

common.content_added_by

FunctorChain এবং Composite Functors

156
156

অ্যাপাচি কমন্স কালেকশনস (Apache Commons Collections) লাইব্রেরি ফাংশনাল প্রোগ্রামিং কনসেপ্টের উপর ভিত্তি করে বিভিন্ন ধরনের ফাংশনাল ইউটিলিটি সরবরাহ করে, যার মধ্যে FunctorChain এবং Composite Functors একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। এগুলি মূলত একাধিক Functor (ফাংশন) এর সমন্বয়ে তৈরি হয়, যেখানে একাধিক ফাংশনকে একটি শৃঙ্খলায় (chain) বা সংমিশ্রণে (composite) একত্রে কার্যকর করা হয়।

Functor সাধারণভাবে একটি ফাংশনাল একক হিসেবে কাজ করে, যা একটি ইনপুট গ্রহণ করে এবং একটি আউটপুট প্রদান করে। FunctorChain এবং Composite Functors এর মাধ্যমে আপনি একাধিক ফাংশনকে একত্রে একসাথে প্রয়োগ করতে পারেন, যা কোডের পুনঃব্যবহারযোগ্যতা এবং পারফরম্যান্স উন্নত করতে সাহায্য করে।


1. FunctorChain


FunctorChain একটি ফাংশনের একটি শৃঙ্খলা (chain) তৈরি করে, যেখানে একাধিক functors একে অপরের পর পর কাজ করে। এটি এমন একটি প্রক্রিয়া যেখানে প্রথম ফাংশনের আউটপুট পরবর্তী ফাংশনের ইনপুট হিসেবে ব্যবহৃত হয় এবং এভাবে শৃঙ্খলবদ্ধভাবে একাধিক ফাংশন কাজ করে।

FunctorChain এর বৈশিষ্ট্য:

  • একাধিক functors কে একটি শৃঙ্খলায় (chain) একত্রিত করা হয়।
  • একটি ফাংশন শৃঙ্খলায় প্রাপ্ত আউটপুটটি পরবর্তী ফাংশনের ইনপুট হিসেবে ব্যবহৃত হয়।
  • এটি Function Composition এর মতো কাজ করে, যেখানে একাধিক ফাংশন একসাথে ব্যবহার করা হয়।

FunctorChain উদাহরণ:

import org.apache.commons.collections4.functors.FunctorChain;
import org.apache.commons.collections4.functors.StringToUpperCaseTransformer;
import org.apache.commons.collections4.functors.StringToLowerCaseTransformer;

public class FunctorChainExample {
    public static void main(String[] args) {
        // Create functors for transforming a string
        StringToUpperCaseTransformer toUpperCase = new StringToUpperCaseTransformer();
        StringToLowerCaseTransformer toLowerCase = new StringToLowerCaseTransformer();
        
        // Create a FunctorChain with two transformers
        FunctorChain<Object> functorChain = new FunctorChain<>(toUpperCase, toLowerCase);
        
        // Apply the FunctorChain on a string
        String result = (String) functorChain.transform("Hello World");
        
        // Output the result
        System.out.println(result);  // Output: hello world
    }
}

এখানে:

  • দুটি transformer (একটি toUpperCase এবং একটি toLowerCase) FunctorChain এ সংযুক্ত করা হয়েছে।
  • FunctorChain প্রথমে ইনপুটের উপর toUpperCase ফাংশন প্রয়োগ করবে এবং তারপর ফলস্বরূপ আউটপুটে toLowerCase প্রয়োগ করবে।

2. Composite Functors


Composite Functors হল এমন একটি কৌশল যেখানে একাধিক functors একত্রিত করা হয় এবং তাদেরকে একটি একক ফাংশন হিসাবে প্রয়োগ করা হয়। এটি FunctorChain এর মতো, তবে এখানে প্রতিটি ফাংশন সম্পূর্ণভাবে একটি একক ফাংশন হিসেবে কাজ করে এবং তা অনেকগুলো ফাংশনের সংমিশ্রণ হতে পারে।

Composite Functors এর বৈশিষ্ট্য:

  • একাধিক functors সংমিশ্রিত হয় এবং একটি একক ফাংশন হিসাবে কাজ করে।
  • প্রতিটি ফাংশন পরবর্তী ফাংশনের ইনপুট হিসেবে কাজ করে এবং আউটপুট প্রক্রিয়া চলে।
  • Composite ফাংশন ব্যবহার করে আপনি একাধিক ট্রান্সফর্মেশন এবং অপারেশন একসাথে ব্যবহার করতে পারেন।

Composite Functors উদাহরণ:

import org.apache.commons.collections4.functors.FunctorUtils;
import org.apache.commons.collections4.functors.StringToUpperCaseTransformer;
import org.apache.commons.collections4.functors.StringToLowerCaseTransformer;

public class CompositeFunctorsExample {
    public static void main(String[] args) {
        // Create functors for transforming a string
        StringToUpperCaseTransformer toUpperCase = new StringToUpperCaseTransformer();
        StringToLowerCaseTransformer toLowerCase = new StringToLowerCaseTransformer();
        
        // Create a Composite Functor that applies both transformations
        FunctorUtils.TransformedTransformer compositeFunctor = 
            new FunctorUtils.TransformedTransformer(toUpperCase, toLowerCase);
        
        // Apply the Composite Functor on a string
        String result = (String) compositeFunctor.transform("Hello World");
        
        // Output the result
        System.out.println(result);  // Output: hello world
    }
}

এখানে:

  • Composite Functor তৈরি করার জন্য FunctorUtils ব্যবহার করা হয়েছে, যা দুটি ফাংশনকে একটি একক ফাংশন হিসেবে মিশ্রিত করে এবং সেগুলিকে ধারাবাহিকভাবে প্রয়োগ করে।

FunctorChain এবং Composite Functors এর মধ্যে পার্থক্য

পয়েন্টFunctorChainComposite Functors
বৈশিষ্ট্যএকাধিক ফাংশন একের পর এক প্রয়োগ করা হয়।একাধিক ফাংশন সংমিশ্রিত হয়ে একটি একক ফাংশন হিসেবে কাজ করে।
ফাংশন একত্রিতকরণফাংশনগুলো শৃঙ্খলভাবে একের পর এক প্রয়োগ করা হয়।ফাংশনগুলো একত্রিত হয়ে একটি একক ফাংশন হিসেবে কার্যকরী হয়।
ফাংশন সংমিশ্রণশৃঙ্খলা অনুসারে (sequentially) ফাংশনগুলিকে সংমিশ্রিত করা হয়।একাধিক ফাংশনকে একটি composite হিসেবে সংমিশ্রিত করা হয়।
ব্যবহারএকাধিক ট্রান্সফরমেশন প্রয়োগ করতে ব্যবহার হয়।একাধিক ফাংশনকে একটি একক ফাংশনে মিশ্রিত করে প্রক্রিয়া করার জন্য ব্যবহৃত হয়।

কখন FunctorChain বা Composite Functors ব্যবহার করবেন?

  • FunctorChain ব্যবহার করবেন যদি আপনি একাধিক ফাংশনকে একটি শৃঙ্খলা বা ক্রম অনুসারে প্রয়োগ করতে চান, যেখানে একটির আউটপুট পরবর্তীটির ইনপুট হিসেবে কাজ করবে।
  • Composite Functors ব্যবহার করবেন যখন আপনি একাধিক ফাংশনকে একত্রিত করে একটি composite ফাংশন তৈরি করতে চান, যেখানে প্রতিটি ফাংশন একটি নির্দিষ্ট কাজ করে এবং তাদের সবগুলোকে একত্রে কার্যকরী করতে হবে।

সারাংশ


FunctorChain এবং Composite Functors উভয়ই Apache Commons Collections লাইব্রেরির শক্তিশালী ফাংশনাল প্রোগ্রামিং কৌশল। FunctorChain একাধিক ফাংশনকে শৃঙ্খলভাবে প্রয়োগ করতে সাহায্য করে, যেখানে Composite Functors একাধিক ফাংশনকে একটি একক ফাংশনে সংমিশ্রিত করে। এই দুটি কৌশল ব্যবহার করে আপনি জাভা প্রোগ্রামে ফাংশনাল অপারেশনগুলোকে আরো কার্যকরী ও পুনঃব্যবহারযোগ্য করতে পারেন।

common.content_added_by

Predicated Collection তৈরি

125
125

Apache Commons Collections লাইব্রেরি Predicated Collection তৈরি করার জন্য একটি শক্তিশালী ইউটিলিটি সরবরাহ করে, যা predicate-based filtering প্রক্রিয়া ব্যবহার করে। Predicate হল একটি শর্ত যা true অথবা false রিটার্ন করে এবং Predicated Collection হলো একটি কালেকশন যা শুধুমাত্র সেই উপাদানগুলো ধারণ করে যা predicate শর্ত পূর্ণ করে।

এটি Collections-এ উপাদানগুলোর উপর filtering করতে সাহায্য করে, যা সাধারণভাবে validation বা condition-based inclusion হিসাবে ব্যবহৃত হয়।

1. Predicate কী?

Predicate একটি ফাংশনাল কনসেপ্ট যা একটি ইনপুট নেয় এবং boolean রিটার্ন করে, যা সাধারণত কোনো শর্ত পরীক্ষা করার জন্য ব্যবহৃত হয়। যেমন, একটি মান পরীক্ষা করা যে তা নির্দিষ্ট একটি সীমার মধ্যে আছে কিনা অথবা কোনো অবস্থা পূর্ণ করছে কিনা।

এটি Apache Commons CollectionsPredicate ইন্টারফেস হিসেবে বাস্তবায়িত, এবং এখানে বিভিন্ন predicate তৈরি করা এবং কালেকশনগুলিতে predicate-based filtering প্রয়োগ করা যায়।

2. Predicated Collection তৈরি করা

Predicated Collection হল এমন একটি Collection (যেমন List, Set ইত্যাদি) যা predicate এর মাধ্যমে ফিল্টার করা হয়। এটি একটি Predicate ফাংশন ব্যবহার করে উপাদানগুলোকে যাচাই করে, এবং শুধুমাত্র সেই উপাদানগুলো সংগ্রহে থাকে যা শর্ত পূর্ণ করে।

2.1 Predicated Collection তৈরি করার উদাহরণ

Apache Commons Collections লাইব্রেরিতে PredicatedCollection ক্লাসটি ব্যবহৃত হয় predicate তৈরি করে এবং নির্দিষ্ট শর্ত অনুযায়ী কালেকশনের উপাদান ফিল্টার করার জন্য।

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Predicate;
import org.apache.commons.collections4.collection.PredicatedCollection;

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

public class PredicatedCollectionExample {
    public static void main(String[] args) {
        // একটি List তৈরি করা
        List<String> list = new ArrayList<>();
        list.add("apple");
        list.add("banana");
        list.add("cherry");
        list.add("orange");

        // Predicate তৈরি করা (যেখানে উপাদানটি 'a' দিয়ে শুরু হতে হবে)
        Predicate<String> startsWithAPredicate = new Predicate<String>() {
            @Override
            public boolean evaluate(String input) {
                return input.startsWith("a");
            }
        };

        // PredicatedCollection তৈরি করা
        PredicatedCollection<String> predicatedCollection = new PredicatedCollection<>(list, startsWithAPredicate);

        // PredicatedCollection এর উপাদান ফিল্টার করা
        System.out.println("Filtered Collection: " + predicatedCollection);
    }
}

আউটপুট:

Filtered Collection: [apple]

এখানে:

  • একটি Predicate তৈরি করা হয়েছে যা যাচাই করে, কোন স্ট্রিংটি "a" দিয়ে শুরু হয় কি না।
  • PredicatedCollection তৈরি করে list এর উপাদানগুলির মধ্যে শুধুমাত্র সেই উপাদানটি রাখা হয়েছে যেটি startsWith("a") শর্ত পূর্ণ করে।
  • ফলস্বরূপ, "apple" মাত্ৰ একটি উপাদান হিসেবে রয়ে গেছে, কারণ তা "a" দিয়ে শুরু হয়।

2.2 Predicated Collection এ Multiple Predicate ব্যবহার

আপনি একাধিক predicate শর্ত ব্যবহার করে Predicated Collection তৈরি করতে পারেন। এই ক্ষেত্রে, আপনি একটি and বা or শর্তে predicates যোগ করতে পারেন।

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Predicate;
import org.apache.commons.collections4.collection.PredicatedCollection;
import org.apache.commons.collections4.functors.AllPredicate;
import org.apache.commons.collections4.functors.NotPredicate;

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

public class PredicatedCollectionExample {
    public static void main(String[] args) {
        // একটি List তৈরি করা
        List<String> list = new ArrayList<>();
        list.add("apple");
        list.add("banana");
        list.add("cherry");
        list.add("orange");

        // Predicate তৈরি করা (যেখানে উপাদানটি 'a' দিয়ে শুরু হতে হবে এবং 5 অক্ষরের কম হবে)
        Predicate<String> startsWithAPredicate = new Predicate<String>() {
            @Override
            public boolean evaluate(String input) {
                return input.startsWith("a");
            }
        };

        Predicate<String> lengthPredicate = new Predicate<String>() {
            @Override
            public boolean evaluate(String input) {
                return input.length() < 6;
            }
        };

        // Multiple predicates কে AllPredicate তে সংযুক্ত করা
        Predicate<String> combinedPredicate = new AllPredicate<>(startsWithAPredicate, lengthPredicate);

        // PredicatedCollection তৈরি করা
        PredicatedCollection<String> predicatedCollection = new PredicatedCollection<>(list, combinedPredicate);

        // PredicatedCollection এর উপাদান ফিল্টার করা
        System.out.println("Filtered Collection: " + predicatedCollection);
    }
}

আউটপুট:

Filtered Collection: [apple]

এখানে:

  • আমরা দুটি predicate যুক্ত করেছি:
    • প্রথমটি চেক করে যে উপাদানটি "a" দিয়ে শুরু হচ্ছে কি না।
    • দ্বিতীয়টি চেক করে যে উপাদানটির দৈর্ঘ্য ৫ অক্ষরের কম কি না।
  • AllPredicate ব্যবহার করে দুটি predicate একসাথে and শর্তে সংযুক্ত করেছি। এর ফলে শুধুমাত্র "apple" উপাদানটি শর্ত পূর্ণ করেছে, কারণ এটি "a" দিয়ে শুরু হয় এবং এর দৈর্ঘ্য ৫ অক্ষরের কম।

3. CollectionUtils দিয়ে Predicated Collection তৈরি

Apache Commons Collections লাইব্রেরিতে CollectionUtils ক্লাস রয়েছে, যা কিছু সাহায্যকারী মেথড সরবরাহ করে, যার মধ্যে predicatedCollection একটি গুরুত্বপূর্ণ মেথড।

উদাহরণ: CollectionUtils.filter ব্যবহার করে Predicated Collection তৈরি

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

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

public class PredicatedCollectionExample {
    public static void main(String[] args) {
        // একটি List তৈরি করা
        List<String> list = new ArrayList<>();
        list.add("apple");
        list.add("banana");
        list.add("cherry");
        list.add("orange");

        // Predicate তৈরি করা (যেখানে উপাদানটি 'b' দিয়ে শুরু হতে হবে)
        Predicate<String> startsWithB = new Predicate<String>() {
            @Override
            public boolean evaluate(String input) {
                return input.startsWith("b");
            }
        };

        // CollectionUtils.filter ব্যবহার করে Predicated Collection তৈরি
        CollectionUtils.filter(list, startsWithB);

        // Filtered collection দেখানো
        System.out.println("Filtered Collection: " + list);
    }
}

আউটপুট:

Filtered Collection: [banana]

এখানে:

  • CollectionUtils.filter ফাংশনটি ব্যবহার করে, আমরা list এ শুধুমাত্র সেই উপাদান রাখার জন্য predicate প্রয়োগ করেছি যা "b" দিয়ে শুরু হয়।
  • ফলস্বরূপ, "banana" উপাদানটি রয়ে গেছে এবং বাকি উপাদানগুলি বাদ পড়ে গেছে।

4. Predicated Collection এর ব্যবহার

  • Data Validation: আপনি ডেটার একটি কালেকশনে ফিল্টার করতে পারেন, যেমন যেগুলি নির্দিষ্ট শর্ত পূর্ণ করে।
  • Filtering Elements: কোন ডেটা কলেকশন থেকে নির্দিষ্ট শর্তের ভিত্তিতে উপাদান সরানো বা রাখা।
  • Complex Condition Application: একাধিক predicate শর্ত ব্যবহার করে complex validation করা।

সারাংশ

  • Predicated Collection Apache Commons Collections এর একটি গুরুত্বপূর্ণ ইউটিলিটি, যা predicate-based filtering এর মাধ্যমে Collection এর উপাদান ফিল্টার করতে সহায়তা করে।
  • Predicate হল এমন একটি শর্ত যা boolean রিটার্ন করে এবং এই শর্তটি PredicatedCollection এ প্রয়োগ করা হয়।
  • CollectionUtils এর মাধ্যমে আপনি filter করতে পারেন এবং predicate শর্ত প্রয়োগ করতে পারেন।
  • এটি বিশেষত ডেটা validation, filtering, বা conditional inclusion এর জন্য খুবই উপকারী।

Apache Commons Collections এর Predicated Collection ফিচারটি Java প্রোগ্রামিংয়ে কার্যকরভাবে ব্যবহৃত হতে পারে যখন আপনাকে ডেটা সিলেকশন বা ফিল্টারিং করতে হয়।

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

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

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

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