কম্পিউটার টিউটোরিয়াল

জাভা প্রোগ্রাম: ল্যাম্বডা এক্সপ্রেশন (Lambda Expression) মেথড আর্গুমেন্ট হিসেবে পাস করা

ল্যাম্বডা এক্সপ্রেশন (Lambda Expression) কী?

ল্যাম্বডা এক্সপ্রেশন হলো একটি ছোট কোড ব্লক যা প্যারামিটার নেয় এবং একটি ভ্যালু রিটার্ন করে। এটি অ্যানোনিমাস ফাংশন (anonymous function) এর 일종। জাভা ৮ থেকে প্রবর্তিত, এটি ফাংশনাল প্রোগ্রামিং শৈলী সক্ষম করে।

সিনট্যাক্স: (parameters) -> { body }

ইনপুট ও আউটপুট উদাহরণ

ইনপুট:

("Apple", "Orange", "Grapes")

আউটপুট:

elppA, egnarO, separG

প্রতিটি স্ট্রিং রিভার্স হয়েছে

অ্যালগরিদম

  1. প্রোগ্রাম শুরু করুন
  2. ArrayList ডিক্লেয়ার করুন এবং ডেটা যোগ করুন
  3. forEach() মেথডে ল্যাম্বডা এক্সপ্রেশন পাস করুন
  4. ল্যাম্বডা ভিতরে প্রতিটি স্ট্রিং রিভার্স করুন
  5. ফলাফল প্রিন্ট করুন
  6. প্রোগ্রাম শেষ করুন

উদাহরণ ১: ফলের লিস্ট রিভার্স

import java.util.ArrayList;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        ArrayList fruits = new ArrayList<>(Arrays.asList("Apple", "Orange", "Grapes"));
        System.out.println("The ArrayList is defined as : " + fruits);
        System.out.print("The Reversed ArrayList is: ");
        
        fruits.forEach((e) -> {
            String result = "";
            for (int i = e.length() - 1; i >= 0; i--) {
                result += e.charAt(i);
            }
            System.out.print(result + ", ");
        });
    }
}

উদাহরণ ২: গেমের লিস্ট রিভার্স

import java.util.ArrayList;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        ArrayList games = new ArrayList<>(Arrays.asList("Football", "Cricket", "Baseball"));
        System.out.println("The ArrayList is defined as : " + games);
        System.out.print("The Reversed ArrayList is: ");
        
        games.forEach((e) -> {
            String result = "";
            for (int i = e.length() - 1; i >= 0; i--) {
                result += e.charAt(i);
            }
            System.out.print(result + ", ");
        });
    }
}

ল্যাম্বডা এক্সপ্রেশন ব্যাখ্যা

// ফুল সিনট্যাক্স
(String e) -> {
    String result = "";
    for (int i = e.length() - 1; i >= 0; i--) {
        result += e.charAt(i);
    }
    System.out.print(result + ", ");
}

// সংক্ষিপ্ত সিনট্যাক্স (একটি স্টেটমেন্ট, নো ব্রেস, নো রিটার্ন)
e -> System.out.print(new StringBuilder(e).reverse() + ", ")

StringBuilder ব্যবহার করে আরও দক্ষ রিভার্স

fruits.forEach(e -> System.out.print(new StringBuilder(e).reverse() + ", "));

ফাংশনাল ইন্টারফেস এবং ল্যাম্বডা

ল্যাম্বডা শুধু ফাংশনাল ইন্টারফেস (একটি অ্যাবস্ট্রাক্ট মেথড 가진 ইন্টারফেস) এর সাথে কাজ করে:

forEach বনাম Stream API


// forEach (terminal operation on Collection)
list.forEach(e -> System.out.println(e));

// Stream API (লেজি ইভ্যালুয়েশন, চেইনিং)
list.stream()
    .map(String::toUpperCase)
    .filter(s -> s.length() > 3)
    .forEach(System.out::println);

মেথড রেফারেন্স (Method Reference) - ল্যাম্বডার সংক্ষিপ্ত রূপ

ইন্টারফেসঅ্যাবস্ট্রাক্ট মেথডল্যাম্বডা উদাহরণ
Predicate<T>boolean test(T t)x -> x > 0
Function<T,R>R apply(T t)x -> x * 2
Consumer<T>void accept(T t)x -> System.out.println(x)
Supplier<T>T get()() -> "Hello"
BinaryOperator<T>T apply(T t1, T t2)(a, b) -> a + b

ব্যক্তিগত ল্যাম্বডা ভেরিয়েবলে স্টোর করা

// Consumer টাইপের ভেরিয়েবলে স্টোর
Consumer printer = s -> System.out.println("Item: " + s);
printer.accept("Apple");
printer.accept("Orange");

// Function - ইনপুট ইন্ট, আউটপুট ইন্ট
Function square = x -> x * x;
System.out.println(square.apply(5)); // 25

// Predicate - বুলিয়ান রিটার্ন
Predicate isEven = x -> x % 2 == 0;
System.out.println(isEven.test(4)); // true

ভেরিয়েবল ক্যাপচার (Variable Capture)

ল্যাম্বডা বাইরের ফাইনাল বা ইফেক্টিভলি ফাইনাল ভেরিয়েবল অ্যাক্সেস করতে পারে:

int factor = 10;
Function multiply = x -> x * factor; // factor ইফেক্টিভলি ফাইনাল
// factor = 20; // এরর! ল্যাম্বডা ক্যাপচার করলে মিউটেবল নয়

সাধারণ ভুল

  • নন-ফাইনাল ভেরিয়েবল ক্যাপচার করার চেষ্টা
  • চেকড এক্সেপশন থ্রো করতে চাইলে ফাংশনাল ইন্টারফেস অনুমতি দেয় না (ট্রাই-ক্যাচ বা কাস্টম ইন্টারফেস লাগে)
  • this কীওয়ার্ড ল্যাম্বডায় enclosing class-কে রেফার করে (অনোনিমাস ক্লাসের মত নয়)
  1. জাভাতে Pattern pattern() মেথড - উদাহরণ সহ ব্যাখ্যা

  2. জাভা প্রোগ্রাম: প্যালিনড্রোম চেক করা

  3. জাভা প্রোগ্রাম মেইন মেথড ছাড়া এক্সিকিউট করা যায় কি?

  4. জাভা ৮-এ ইন্টারফেস এনহ্যান্সমেন্ট

কপিরাইট © https://bd.wsxdn.com সমস্ত অধিকার সংরক্ষিত
ল্যাম্বডামেথড রেফারেন্সটাইপ
x -> System.out.println(x)System.out::printlnস্ট্যাটিক মেথড
str -> str.length()String::lengthইন্সট্যান্স মেথড
(a, b) -> a.compareTo(b)String::compareToআবজেক্টের ইন্সট্যান্স মেথড
() -> new ArrayList()ArrayList::newকনস্ট্রাক্টর