Collection Selection এবং Projection

স্প্রিং এক্সপ্রেশন ল্যাঙ্গুয়েজ (Spring Expression Language) - Java Technologies

316

Spring Expression Language (SpEL) একটি শক্তিশালী এক্সপ্রেশন ভাষা যা Java beans, মেথড কল, ডাটাবেস কুয়েরি, এবং অন্যান্য প্রোগ্রামিং কাজের জন্য ব্যবহার করা হয়। SpEL-এর মাধ্যমে Collection Selection এবং Projection অনেক সহজভাবে কার্যকরী করা যায়, বিশেষ করে ডেটা সেট থেকে নির্দিষ্ট উপাদান নির্বাচন এবং উপস্থাপন করার সময়।


Collection Selection এবং Projection: বেসিক ধারণা

  1. Collection Selection: SpEL ব্যবহার করে একটি Collection (যেমন, List, Set, বা Map) থেকে নির্দিষ্ট উপাদান নির্বাচন করা। এটি যেমন List বা Set এর মধ্যে ফিল্টারিং এবং নির্বাচনের কাজ করে।
  2. Projection: Collection এর মধ্যে থেকে নির্দিষ্ট উপাদানগুলো (বা শুধুমাত্র নির্দিষ্ট ফিল্ডসমূহ) নির্বাচন করা। এটি মূলত Collection-এর ডাটা প্রজেক্ট করতে সাহায্য করে, যেমন কোনো অবজেক্টের কিছু প্রপার্টি বের করা।

১. Collection Selection with SpEL

১.১. Collection এর উপাদান নির্বাচন

SpEL ব্যবহার করে Collection (যেমন List) থেকে নির্দিষ্ট উপাদান নির্বাচন করা খুবই সহজ। নিচে একটি উদাহরণ দেওয়া হলো:

@Configuration
public class SpelCollectionSelection {

    @Value("#{T(java.util.Arrays).asList('Apple', 'Banana', 'Cherry').contains('Banana')}")
    private boolean isBananaPresent;

    @PostConstruct
    public void init() {
        System.out.println("Is Banana present in the list? " + isBananaPresent);
    }
}

এখানে, T(java.util.Arrays).asList('Apple', 'Banana', 'Cherry').contains('Banana') এক্সপ্রেশন SpEL ব্যবহার করে List এর মধ্যে Banana উপাদানটি খুঁজে বের করছে।

১.২. Collection Filtering (ফিল্টারিং)

SpEL ব্যবহার করে Collection থেকে কিছু নির্দিষ্ট উপাদান ফিল্টার করা যেতে পারে। উদাহরণস্বরূপ:

@Configuration
public class SpelCollectionFiltering {

    @Value("#{T(java.util.Arrays).asList(1, 2, 3, 4, 5, 6).stream().filter(x -> x % 2 == 0).collect(T(java.util.stream.Collectors).toList())}")
    private List<Integer> evenNumbers;

    @PostConstruct
    public void init() {
        System.out.println("Even Numbers: " + evenNumbers);
    }
}

এখানে, filter(x -> x % 2 == 0) এক্সপ্রেশনটি শুধুমাত্র যেসব সংখ্যা even (যেমন ২, ৪, ৬) তাদেরই নির্বাচন করছে।

১.৩. Collection Sorting (সর্টিং)

SpEL-এর মাধ্যমে Collection-এ Sorting করাও সম্ভব। উদাহরণ:

@Configuration
public class SpelCollectionSorting {

    @Value("#{T(java.util.Arrays).asList(5, 2, 8, 1, 3).stream().sorted().collect(T(java.util.stream.Collectors).toList())}")
    private List<Integer> sortedNumbers;

    @PostConstruct
    public void init() {
        System.out.println("Sorted Numbers: " + sortedNumbers);
    }
}

এখানে, sorted() মেথড ব্যবহার করে List এর উপাদানগুলোর সঠিক ক্রমে সাজানো হয়েছে।


২. Projection with SpEL

২.১. Object Field Projection

SpEL ব্যবহার করে একটি Collection থেকে শুধুমাত্র নির্দিষ্ট প্রপার্টি বা ফিল্ড নির্বাচন করা যায়। উদাহরণস্বরূপ, একটি Person অবজেক্টের নাম এবং বয়স নির্বাচন করা:

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

    // Getters and Setters
}

@Configuration
public class SpelProjectionExample {

    @Value("#{T(java.util.Arrays).asList(new com.example.Person('Alice', 30), new com.example.Person('Bob', 25), new com.example.Person('Charlie', 35)).stream().map(p -> p.name).collect(T(java.util.stream.Collectors).toList())}")
    private List<String> names;

    @PostConstruct
    public void init() {
        System.out.println("Names: " + names);
    }
}

এখানে p.name ব্যবহার করে Person অবজেক্টের নাম ফিল্ডটি প্রজেক্ট করা হয়েছে এবং একটি List<String> তৈরি করা হয়েছে যা সমস্ত Person এর নাম ধারণ করবে।

২.২. Complex Object Projection

Complex objects বা nested objects থেকেও SpEL দিয়ে প্রজেক্ট করা যায়। যেমন, Order এবং Product এর একটি Complex Structure:

public class Product {
    private String productName;
    private double price;

    // Getters and Setters
}

public class Order {
    private String orderId;
    private Product product;

    // Getters and Setters
}

@Configuration
public class SpelComplexProjection {

    @Value("#{T(java.util.Arrays).asList(new com.example.Order('O123', new com.example.Product('Laptop', 1000.0)), new com.example.Order('O124', new com.example.Product('Phone', 500.0))).stream().map(o -> o.product.productName).collect(T(java.util.stream.Collectors).toList())}")
    private List<String> productNames;

    @PostConstruct
    public void init() {
        System.out.println("Product Names: " + productNames);
    }
}

এখানে, o.product.productName ব্যবহার করে Order অবজেক্টের ভেতরের Product অবজেক্টের নাম প্রজেক্ট করা হয়েছে এবং List<String> তৈরি করা হয়েছে।

২.৩. Collection থেকে Select এবং Transform (Map)

SpEL ব্যবহার করে Collection থেকে শুধু কিছু নির্দিষ্ট ফিল্ড নির্বাচন এবং তাদের উপর ট্রান্সফরমেশন করা যায়:

@Value("#{T(java.util.Arrays).asList('Spring', 'Hibernate', 'JPA', 'SpEL').stream().map(e -> e.toUpperCase()).collect(T(java.util.stream.Collectors).toList())}")
private List<String> upperCaseTechnologies;

@PostConstruct
public void init() {
    System.out.println("Uppercase Technologies: " + upperCaseTechnologies);
}

এখানে, SpEL এর map() ফাংশন ব্যবহার করে Collection এর সমস্ত উপাদানকে uppercase (বড় হাতের অক্ষরে) পরিবর্তন করা হয়েছে।


৩. SpEL-এ Collection Selection এবং Projection এর কার্যকারিতা

  • Collection Selection: SpEL ব্যবহার করে Collection থেকে নির্দিষ্ট উপাদান নির্বাচন (filtering), sorting, এবং transformation করা যায়।
  • Projection: Complex objects বা nested objects থেকে নির্দিষ্ট properties বা ফিল্ডসমূহ নির্বাচন এবং প্রজেক্ট করা সহজ হয়।

স্পেল-এ Collection Selection এর সুবিধা:

  • ডাইনামিক ডেটা ফিল্টারিং এবং সিলেকশন করার ক্ষমতা।
  • Performance-এ উন্নতি হয় কারণ শুধুমাত্র প্রয়োজনীয় ডেটাই নির্বাচন করা হয়।
  • Complex Object Structure থেকে নির্দিষ্ট প্রপার্টি এক্সট্র্যাক্ট করা সহজ।

সারাংশ

Spring Expression Language (SpEL) দিয়ে Collection Selection এবং Projection করা খুবই শক্তিশালী এবং সুবিধাজনক। এটি Collections বা Arrays থেকে নির্দিষ্ট উপাদান নির্বাচন, ফিল্টারিং, প্রজেকশন এবং ট্রান্সফরমেশন সহজ করে তোলে। Spring Framework-এর মধ্যে SpEL এই ধরনের ডেটা ম্যানিপুলেশন করে অ্যাপ্লিকেশনগুলোকে আরও ডাইনামিক এবং কার্যকরী করে তোলে।

Content added By

Spring Expression Language (SpEL) একটি শক্তিশালী এবং নমনীয় এক্সপ্রেশন ল্যাঙ্গুয়েজ যা Spring Framework এর মধ্যে ব্যবহৃত হয়। SpEL-এর একটি শক্তিশালী বৈশিষ্ট্য হল Collection Selection, যা আপনাকে একটি Collection (যেমন List, Set, বা Map) থেকে নির্দিষ্ট শর্ত অনুযায়ী উপাদান নির্বাচন করতে সাহায্য করে।

Collection Selection হল একটি শক্তিশালী উপায় যা ব্যবহার করে আপনি Collection এর মধ্যে ডেটা ফিল্টার বা নির্বাচন করতে পারেন। এটি সাধারণত #collection.?[expression] (ফিল্টারিং) এবং #collection.![expression] (ট্রান্সফর্মেশন) এক্সপ্রেশন দ্বারা করা হয়।

এই টিউটোরিয়ালে আমরা দেখব কীভাবে SpEL এর মাধ্যমে Collection Selection ব্যবহার করে ফিল্টারিং করা যায়।


Collection Selection এর মাধ্যমে Filtering করা

১. Filtering Expression

SpEL-এর Collection Selection সিম্বল ?[ ] ব্যবহার করে একটি Collection থেকে নির্দিষ্ট শর্ত (Condition) অনুযায়ী উপাদান ফিল্টার করা হয়। এই ফিল্টারিং এক্সপ্রেশনটি একটি predicate expression ব্যবহার করে, যা প্রতিটি উপাদান পরীক্ষা করে এবং সেগুলির মধ্যে যেগুলি শর্ত পূরণ করে, সেগুলি নির্বাচন করে।

Syntax:

#collection.?[expression]

এখানে expression হলো যে শর্তটি আপনি ফিল্টার করতে চান। এটি একটি boolean এক্সপ্রেশন হতে হবে, যেমন item > 10, item == 'Apple' ইত্যাদি।

উদাহরণ: List এর Filtering

ধরা যাক, আমাদের কাছে একটি List রয়েছে, এবং আমরা ঐ List থেকে এমন উপাদানগুলো চাচ্ছি যা একটি নির্দিষ্ট শর্ত পূরণ করে, যেমন price > 50

উদাহরণ ১: List ফিল্টারিং

import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;

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

public class SpELCollectionSelectionExample {

    public static void main(String[] args) {
        // SpEL expression parser তৈরি
        ExpressionParser parser = new SpelExpressionParser();
        StandardEvaluationContext context = new StandardEvaluationContext();

        // List তৈরি
        List<Product> productList = new ArrayList<>();
        productList.add(new Product("Apple", 30));
        productList.add(new Product("Banana", 70));
        productList.add(new Product("Orange", 50));
        productList.add(new Product("Mango", 60));

        // SpEL কনটেক্সটে List সেট করা
        context.setVariable("productList", productList);

        // Filtering expression: Price greater than 50
        List<Product> result = parser.parseExpression("#productList.?[price > 50]").getValue(context, List.class);

        // ফলাফল প্রদর্শন
        result.forEach(product -> System.out.println(product.getName() + " - " + product.getPrice()));
    }
}

class Product {
    private String name;
    private int price;

    public Product(String name, int price) {
        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public int getPrice() {
        return price;
    }
}

এখানে #productList.?[price > 50] এক্সপ্রেশনটি ফিল্টার করবে সেই Product গুলি যাদের price 50 এর বেশি। ফলে, Banana, Mango এই দুটি পণ্য নির্বাচিত হবে।

ফলাফল:

Banana - 70
Mango - 60

২. Filtering a Set

SpEL-এর মাধ্যমে আপনি Set এর মধ্যেও ফিল্টারিং করতে পারেন। Set হল একটি অর্ডারবিহীন কোলেকশন, যেখানে একাধিক উপাদান থাকতে পারে, তবে কোন ডুপ্লিকেট থাকবে না।

উদাহরণ ২: Set ফিল্টারিং

import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;

import java.util.HashSet;
import java.util.Set;

public class SpELSetExample {

    public static void main(String[] args) {
        // SpEL expression parser তৈরি
        ExpressionParser parser = new SpelExpressionParser();
        StandardEvaluationContext context = new StandardEvaluationContext();

        // Set তৈরি
        Set<String> fruitSet = new HashSet<>();
        fruitSet.add("Apple");
        fruitSet.add("Banana");
        fruitSet.add("Orange");
        fruitSet.add("Mango");

        // SpEL কনটেক্সটে Set সেট করা
        context.setVariable("fruitSet", fruitSet);

        // Filtering expression: String length greater than 5
        Set<String> result = parser.parseExpression("#fruitSet.?[length() > 5]").getValue(context, Set.class);

        // ফলাফল প্রদর্শন
        result.forEach(System.out::println);
    }
}

এখানে #fruitSet.?[length() > 5] এক্সপ্রেশনটি Set থেকে শুধুমাত্র সেই ফ্রুটগুলিকে নির্বাচিত করবে, যার নামের দৈর্ঘ্য ৫ এর বেশি। ফলে, Banana, Orange এই দুটি ফল নির্বাচন হবে।

ফলাফল:

Banana
Orange

৩. Filtering with Nested Properties

আপনি nested properties এর সাহায্যে আরও জটিল ফিল্টারিংও করতে পারেন। ধরুন, একটি ক্লাস Person আছে এবং আপনি সেই Person এর একটি address বা অন্য কোনো প্রপার্টির ভিত্তিতে ফিল্টার করতে চান।

উদাহরণ ৩: Nested Properties Filtering

import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;

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

public class SpELNestedPropertiesExample {

    public static void main(String[] args) {
        // SpEL expression parser তৈরি
        ExpressionParser parser = new SpelExpressionParser();
        StandardEvaluationContext context = new StandardEvaluationContext();

        // List of Person objects তৈরি
        List<Person> people = new ArrayList<>();
        people.add(new Person("John", new Address("New York")));
        people.add(new Person("Alice", new Address("London")));
        people.add(new Person("Bob", new Address("New York")));
        people.add(new Person("Eve", new Address("Paris")));

        // SpEL কনটেক্সটে List সেট করা
        context.setVariable("people", people);

        // Filtering by nested property (Address city)
        List<Person> result = parser.parseExpression("#people.?[address.city == 'New York']").getValue(context, List.class);

        // ফলাফল প্রদর্শন
        result.forEach(person -> System.out.println(person.getName()));
    }
}

class Person {
    private String name;
    private Address address;

    public Person(String name, Address address) {
        this.name = name;
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public Address getAddress() {
        return address;
    }
}

class Address {
    private String city;

    public Address(String city) {
        this.city = city;
    }

    public String getCity() {
        return city;
    }
}

এখানে #people.?[address.city == 'New York'] এক্সপ্রেশনটি কেবলমাত্র সেই Person-গুলিকে নির্বাচন করবে যাদের address.city "New York"। ফলস্বরূপ, John এবং Bob নির্বাচিত হবে।

ফলাফল:

John
Bob

উপসংহার

SpEL এর মাধ্যমে Collection Selection ব্যবহার করে আপনি খুব সহজেই Collection (যেমন List, Set) থেকে ফিল্টারিং করতে পারেন। SpEL এর ?[ ] এক্সপ্রেশন ব্যবহার করে Collection থেকে নির্দিষ্ট শর্ত অনুযায়ী উপাদান নির্বাচন করা যায়, যা Spring Framework-এ ডাইনামিক ডেটা এক্সপ্রেশন ব্যবহারের জন্য একটি শক্তিশালী টুল।

Content added By

Collection Projection হল SpEL-এর একটি শক্তিশালী বৈশিষ্ট্য, যা ব্যবহার করে আপনি একটি Collection থেকে নির্দিষ্ট ডেটা বা উপাদান বের করতে পারেন, বিশেষত একটি নির্দিষ্ট শর্ত বা মেথডের ভিত্তিতে। SpEL-এ Projection মূলত Collection থেকে নির্বাচিত উপাদান বা বৈশিষ্ট্য বের করার জন্য ব্যবহৃত হয়। এটি সাধারণত জাভা অ্যাপ্লিকেশন বা Spring Beans এর মধ্যে Filter, Map, এবং Select অপারেশন করতে ব্যবহৃত হয়।

Projection এর মাধ্যমে ডেটা বের করার মূল ধারণা

SpEL-এ Collection Projection এর মাধ্যমে আপনি একটি Collection এর মধ্যে থেকে প্রয়োজনীয় ডেটা সিলেক্ট করতে পারেন এবং সেই ডেটা নিয়ে কাজ করতে পারেন। এটি অ্যারে, লিস্ট, সেট, অথবা ম্যাপ থেকে নির্বাচিত উপাদানগুলো বের করার জন্য কার্যকরী।


SpEL-এ Collection Projection এর ব্যবহার

1. List থেকে নির্দিষ্ট মান বের করা

SpEL-এ Projection ব্যবহার করে List থেকে নির্দিষ্ট শর্তের ভিত্তিতে ডেটা বের করা যায়। উদাহরণস্বরূপ, লিস্টে এমন আইটেম বের করা যেগুলোর দৈর্ঘ্য ৫ এর বেশি।

@Value("#{myList.?[length() > 5]}")
private List<String> filteredList;

ব্যাখ্যা:

  • myList.?[length() > 5] SpEL এক্সপ্রেশনটি myList থেকে এমন উপাদানগুলো বের করবে যেগুলোর দৈর্ঘ্য ৫ এর বেশি।

2. Map থেকে নির্দিষ্ট Key/Value বের করা

SpEL-এ Map থেকে নির্দিষ্ট Key বা Value বের করা যায়।

@Value("#{myMap['key1']}")
private String mapValue;

ব্যাখ্যা:
এখানে myMap['key1'] SpEL এক্সপ্রেশনটি myMap থেকে key1 এর মান বের করবে।

3. Set থেকে নির্দিষ্ট শর্তে উপাদান বের করা

SpEL-এ Set এর মধ্যে এমন উপাদান বের করা যায় যা কিছু নির্দিষ্ট শর্ত পূর্ণ করে।

@Value("#{mySet.?[startsWith('S')]}")
private Set<String> filteredSet;

ব্যাখ্যা:
এখানে mySet.?[startsWith('S')] SpEL এক্সপ্রেশনটি mySet থেকে এমন উপাদানগুলো বের করবে যেগুলোর নাম 'S' দিয়ে শুরু হয়।

4. List থেকে Property Projection

যদি একটি List অবজেক্টে Bean থাকে, তবে SpEL এর মাধ্যমে সেই Bean এর একটি নির্দিষ্ট প্রপার্টি বের করা যায়। উদাহরণস্বরূপ, Employee ক্লাসের নামের সব আইটেম একটি লিস্ট থেকে বের করা।

@Value("#{employeeList.?[salary > 50000].name}")
private List<String> highSalaryEmployeeNames;

ব্যাখ্যা:
এখানে employeeList.?[salary > 50000].name SpEL এক্সপ্রেশনটি employeeList থেকে এমন Employee গুলোর নাম বের করবে যাদের salary ৫০,০০০ এর বেশি।


Spring Bean-এ Collection Projection এর বাস্তব উদাহরণ

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
import java.util.Set;

@Component
public class CollectionProjectionExample {

    @Value("#{myList.?[length() > 3]}")
    private List<String> filteredList;

    @Value("#{myMap['key1']}")
    private String mapValue;

    @Value("#{mySet.?[startsWith('A')]}")
    private Set<String> filteredSet;

    @Value("#{employeeList.?[salary > 50000].name}")
    private List<String> highSalaryEmployeeNames;

    public void printFilteredCollections() {
        System.out.println("Filtered List: " + filteredList);
        System.out.println("Map Value for key1: " + mapValue);
        System.out.println("Filtered Set: " + filteredSet);
        System.out.println("High Salary Employee Names: " + highSalaryEmployeeNames);
    }
}

Spring XML Configuration Example

<bean id="myList" class="java.util.ArrayList">
    <constructor-arg>
        <list>
            <value>Spring</value>
            <value>SpEL</value>
            <value>Collection</value>
            <value>Filter</value>
        </list>
    </constructor-arg>
</bean>

<bean id="mySet" class="java.util.HashSet">
    <constructor-arg>
        <set>
            <value>Apple</value>
            <value>Banana</value>
            <value>Strawberry</value>
        </set>
    </constructor-arg>
</bean>

<bean id="myMap" class="java.util.HashMap">
    <constructor-arg>
        <map>
            <entry key="key1" value="value1"/>
            <entry key="key2" value="value2"/>
        </map>
    </constructor-arg>
</bean>

<bean id="employeeList" class="java.util.ArrayList">
    <constructor-arg>
        <list>
            <bean class="com.example.Employee">
                <property name="name" value="John"/>
                <property name="salary" value="60000"/>
            </bean>
            <bean class="com.example.Employee">
                <property name="name" value="Alice"/>
                <property name="salary" value="40000"/>
            </bean>
            <bean class="com.example.Employee">
                <property name="name" value="Bob"/>
                <property name="salary" value="70000"/>
            </bean>
        </list>
    </constructor-arg>
</bean>

SpEL Collection Projection এর সুবিধা

বৈশিষ্ট্যবর্ণনা
ডায়নামিক ডেটা এক্সপ্রেশনCollection থেকে প্রয়োজনীয় ডেটা বের করা খুব সহজ এবং ডায়নামিকভাবে করা যায়।
শর্তাধীন ডেটা ফিল্টারিংSpEL এর মাধ্যমে ফিল্টারিং বা শর্ত প্রয়োগ করে প্রয়োজনীয় ডেটা বের করা সম্ভব।
ফ্লেক্সিবিলিটিSpEL ব্যবহার করে Collection এর যে কোনো অংশকে প্রোজেক্ট করা যায়।
অ্যারে, লিস্ট, সেট, ম্যাপ সাপোর্টSpEL বিভিন্ন Collection টাইপ যেমন অ্যারে, লিস্ট, সেট, ম্যাপ প্রোজেক্ট করতে সমর্থন করে।

Spring Expression Language (SpEL) এর মাধ্যমে Collection Projection ব্যবহার করে আপনি সহজেই একটি Collection থেকে নির্দিষ্ট শর্ত, প্রপার্টি বা উপাদান বের করতে পারেন। এটি Spring Beans বা XML কনফিগারেশন ফাইলে ডায়নামিক ডেটা প্রসেসিংয়ের জন্য খুবই কার্যকরী।

Content added By

Spring Expression Language (SpEL)-এ Collection Selection এবং Projection অপারেটরগুলি ব্যবহার করে আপনার ডাটা সংগ্রহ থেকে নির্দিষ্ট উপাদান নির্বাচন করা এবং ম্যাপ করা সম্ভব হয়। এগুলি খুবই শক্তিশালী টুল যখন আপনি ডেটা ফিল্টার এবং ট্রান্সফর্মেশন করতে চান।


Collection Selection

Collection Selection অপারেটর ব্যবহার করে একটি Collection (যেমন, লিস্ট, সেট, ম্যাপ ইত্যাদি) থেকে নির্দিষ্ট উপাদান বা উপাদানগুলির নির্বাচন করা যায়। এটি একটি filtering অপারেশন হিসেবে কাজ করে এবং নির্দিষ্ট শর্ত পূর্ণ করলে কেবলমাত্র সেই উপাদানগুলো নির্বাচন করা হয়।

সেন্ট্যাক্স:

collection.?[condition]

এখানে:

  • collection: যে কালেকশন থেকে উপাদান নির্বাচন করতে চান।
  • condition: একটি শর্ত যা সত্য হলে উপাদানটি নির্বাচিত হবে।

উদাহরণ:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);

String expression = "#{numbers.?[T(java.lang.Integer).parseInt(#this.toString()) % 2 == 0]}";
List<Integer> evenNumbers = parser.parseExpression(expression).getValue(context, List.class);
System.out.println(evenNumbers);  // Output: [2, 4, 6]

এখানে, numbers লিস্টে থেকে শুধুমাত্র even numbers নির্বাচন করা হয়েছে। T(java.lang.Integer).parseInt(#this.toString()) % 2 == 0 শর্তের মাধ্যমে শুধুমাত্র সেগুলি ফিল্টার করা হচ্ছে যেগুলি ২ দিয়ে ভাগযোগ্য।


Collection Projection

Projection অপারেটর ব্যবহার করে একটি Collection থেকে নির্দিষ্ট উপাদানের একটি নতুন প্রকল্প (projection) তৈরি করা যায়, অর্থাৎ আপনি যদি কলেকশনের কোনো অংশ পরিবর্তন বা ম্যাপ করতে চান, তবে সেটি করা সম্ভব হয়।

সেন্ট্যাক্স:

collection.![expression]

এখানে:

  • collection: যে কালেকশন থেকে নতুন ভ্যালু নির্বাচন করবেন।
  • expression: প্রতিটি উপাদানের উপর প্রয়োগ করা এক্সপ্রেশন, যার মাধ্যমে নতুন মান বা মানগুলো তৈরি হবে।

উদাহরণ:

List<Person> people = Arrays.asList(new Person("John", 25), new Person("Jane", 30), new Person("Joe", 22));

String expression = "#{people.![name]}";
List<String> names = parser.parseExpression(expression).getValue(context, List.class);
System.out.println(names);  // Output: [John, Jane, Joe]

এখানে, Projection অপারেটরের মাধ্যমে people লিস্টের প্রতিটি Person অবজেক্ট থেকে শুধু name প্রপার্টি নির্বাচন করা হয়েছে।

আরও একটি উদাহরণ:

String expression = "#{people.![age + 5]}";
List<Integer> projectedAges = parser.parseExpression(expression).getValue(context, List.class);
System.out.println(projectedAges);  // Output: [30, 35, 27]

এখানে, age + 5 এক্সপ্রেশন ব্যবহার করে age প্রপার্টির উপর ৫ যোগ করা হয়েছে।


Collection Selection এবং Projection এর মধ্যে পার্থক্য

  • Collection Selection একটি শর্তের ভিত্তিতে উপাদান নির্বাচন করে, অর্থাৎ এটি শুধুমাত্র সেই উপাদানগুলোকে ফিরিয়ে দেয় যেগুলি শর্ত পূর্ণ করে।
  • Projection একটি নতুন মান বা পরিবর্তিত মানের কালেকশন তৈরি করে, যা মূল উপাদানগুলো পরিবর্তন বা ম্যাপ করার জন্য ব্যবহৃত হয়।

সার্বিক উপসংহার

Collection Selection এবং Projection অপারেটরগুলি SpEL (Spring Expression Language) এর শক্তিশালী বৈশিষ্ট্য যা আপনাকে ডাটা ফিল্টার ও ম্যাপ করার ক্ষেত্রে সাহায্য করে। Collection Selection অপারেটর দিয়ে আপনি একটি কালেকশন থেকে নির্দিষ্ট শর্ত অনুসারে উপাদান নির্বাচন করতে পারেন, এবং Projection অপারেটর দিয়ে আপনি একটি কালেকশন থেকে নির্দিষ্ট মান বা প্রপার্টি বের করে নতুন ভ্যালু তৈরি করতে পারেন। এগুলি Spring কনফিগারেশন বা অন্যান্য জটিল ডেটা প্রসেসিংয়ের জন্য অত্যন্ত কার্যকর।


Content added By
Promotion

Are you sure to start over?

Loading...