Java Technologies Lambda Expressions এবং Generics এর Integration গাইড ও নোট

288

জাভা ৮ থেকে Lambda Expressions এবং Generics একসঙ্গে ব্যবহার করে আরও কার্যকর এবং সংক্ষিপ্ত কোড লেখা সম্ভব হয়েছে। Lambda Expressions মূলত ফাংশনাল প্রোগ্রামিং ধারণা নিয়ে এসেছে, যা Functional Interfaces এর মাধ্যমে কাজ করে। জেনেরিক্সের সাথে Lambda ব্যবহার করার ফলে টাইপ সেফ এবং পুনঃব্যবহারযোগ্য কোড তৈরি করা যায়।


Lambda Expressions এবং Functional Interface সংক্ষেপে

  • Lambda Expression: এটি একটি কমপ্যাক্ট পদ্ধতি যেখানে একটি ফাংশনকে ইনলাইন পদ্ধতিতে প্রকাশ করা হয়।
    • Syntax:

      (parameters) -> expression
      
  • Functional Interface: একটি ইন্টারফেস যাতে একটি মাত্র অ্যাবস্ট্রাক্ট মেথড থাকে। Lambda Expressions এর মাধ্যমে এই ইন্টারফেসগুলোর বাস্তবায়ন করা হয়।

Lambda এবং Generics এর Integration এর উদাহরণ

১. Comparator Interface এর সাথে Lambda এবং Generics

Lambda এবং জেনেরিক্স ব্যবহার করে তালিকা (List) সাজানো সহজ হয়।

import java.util.*;

public class LambdaWithGenerics {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

        // Using Lambda Expression for Comparator
        names.sort((s1, s2) -> s1.compareTo(s2));

        System.out.println(names); // [Alice, Bob, Charlie]
    }
}

২. Custom Generic Method এবং Lambda

Lambda ব্যবহার করে জেনেরিক মেথডকে আরও কার্যকর করা যায়।

import java.util.function.Function;

public class GenericLambdaExample {
    public static <T, R> R applyFunction(T input, Function<T, R> function) {
        return function.apply(input);
    }

    public static void main(String[] args) {
        String result = applyFunction(5, x -> "Number: " + (x * 2));
        System.out.println(result); // Number: 10
    }
}

৩. Predicate Interface এর সাথে Lambda এবং Generics

Predicate একটি ফাংশনাল ইন্টারফেস যা একটি ইনপুট নিয়ে বুলিয়ান আউটপুট দেয়। এটি ফিল্টার করার জন্য সাধারণত ব্যবহৃত হয়।

import java.util.*;
import java.util.function.Predicate;

public class GenericPredicateExample {
    public static <T> List<T> filterList(List<T> list, Predicate<T> predicate) {
        List<T> result = new ArrayList<>();
        for (T item : list) {
            if (predicate.test(item)) {
                result.add(item);
            }
        }
        return result;
    }

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

        // Filter even numbers
        List<Integer> evens = filterList(numbers, x -> x % 2 == 0);

        System.out.println(evens); // [2, 4]
    }
}

৪. Consumer Interface এর সাথে Lambda এবং Generics

Consumer ফাংশনাল ইন্টারফেস একটি ইনপুট গ্রহণ করে এবং কোনো রিটার্ন না দিয়ে কাজ সম্পন্ন করে।

import java.util.*;
import java.util.function.Consumer;

public class GenericConsumerExample {
    public static <T> void processItems(List<T> list, Consumer<T> consumer) {
        for (T item : list) {
            consumer.accept(item);
        }
    }

    public static void main(String[] args) {
        List<String> items = Arrays.asList("Java", "Generics", "Lambda");

        processItems(items, item -> System.out.println(item.toUpperCase()));
    }
}

আউটপুট:

JAVA
GENERICS
LAMBDA

৫. Supplier Interface এর সাথে Lambda এবং Generics

Supplier ফাংশনাল ইন্টারফেস কোনো ইনপুট নেয় না এবং একটি আউটপুট প্রদান করে।

import java.util.function.Supplier;

public class GenericSupplierExample {
    public static <T> T provideItem(Supplier<T> supplier) {
        return supplier.get();
    }

    public static void main(String[] args) {
        String message = provideItem(() -> "Hello, Lambda and Generics!");
        System.out.println(message);
    }
}

Lambda এবং Generics এর Integration এর সুবিধা

  1. কোড সংক্ষিপ্ত: Lambda ব্যবহার করে বয়লারপ্লেট কোড কমানো যায়।
  2. টাইপ সেফটি: Generics টাইপ সেফ কোড নিশ্চিত করে।
  3. পুনঃব্যবহারযোগ্যতা: Generics এবং Lambda একত্রে ব্যবহার করলে মেথড এবং ক্লাস আরও পুনঃব্যবহারযোগ্য হয়।
  4. সহজ পঠনযোগ্যতা: কম কোডে সহজবোধ্য কার্যকারিতা প্রকাশ করা যায়।

Lambda এবং Generics এর সাথে সতর্কতা

  1. Type Erasure: জেনেরিক্সে টাইপ ইনফরমেশন কম্পাইল টাইমে মুছে যায়, যা রানটাইম টাইপ চেকিং কিছুটা জটিল করতে পারে।
  2. উপযুক্ত Functional Interface: Lambda ব্যবহার করার জন্য প্রয়োজনীয় Functional Interface নিশ্চিত করতে হবে।
  3. Wildcard ব্যবহার: জেনেরিক্সের সাথে Wildcards (?) ব্যবহার Lambda এর কার্যকারিতা সীমাবদ্ধ করতে পারে।

Lambda Expressions এবং Generics একত্রে ব্যবহারে জাভা প্রোগ্রামিং আরও সংক্ষিপ্ত, ফ্লেক্সিবল এবং কার্যকর হয়েছে। এটি বড় স্কেল প্রজেক্টে টাইপ সেফটি নিশ্চিত করার পাশাপাশি কার্যকারিতা বাড়িয়ে দেয়। সঠিকভাবে Lambda এবং Generics ব্যবহার করে কোড সহজবোধ্য এবং রিডেবল রাখা সম্ভব।

Content added By
Promotion

Are you sure to start over?

Loading...