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

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

247

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
Promotion

Are you sure to start over?

Loading...