Supplier Functional Interface


Supplier কী?

Supplier হলো Java-এর একটি Functional Interface, যা কোনো ইনপুট নেয় না, কিন্তু একটি মান (value) সরবরাহ করে

সহজ কথায়:
Supplier = No Input → Output

উদাহরণ:

  • নতুন অবজেক্ট তৈরি করা
  • Default value দেওয়া
  • Lazy initialization
  • Random value generate করা


Supplier Interface-এর গঠন

@FunctionalInterface
public interface Supplier<T> {
    T get();
}

 এখানে:

  • কোনো parameter নেই
  • get() মেথড একটি value রিটার্ন করে


Supplier কেন দরকার?

যখন:

  • মান দরকার, কিন্তু input নেই
  • Object তৈরি delayed (lazy) করতে চান
  • Default বা fallback value দিতে চান


সহজ Supplier উদাহরণ

বর্তমান সময় দেওয়া

Supplier<LocalDateTime> now =
        LocalDateTime::now;

System.out.println(now.get());


Object তৈরি করতে Supplier

Supplier<User> userSupplier =
        () -> new User("Rahim", 30);

User user = userSupplier.get();


Stream-এর সাথে Supplier ব্যবহার

generate() দিয়ে Stream তৈরি

Stream.generate(() -> Math.random())
      .limit(5)
      .forEach(System.out::println);

এখানে Lambda আসলে একটি Supplier


Lazy Initialization উদাহরণ

Supplier<ExpensiveObject> supplier =
        () -> new ExpensiveObject();

if (needObject) {
    ExpensiveObject obj = supplier.get();
}

object তখনই তৈরি হবে যখন দরকার হবে


Default Value দিতে Supplier

String value = Optional.ofNullable(input)
        .orElseGet(() -> "DEFAULT");

orElseGet() একটি Supplier নেয়


Primitive Supplier (পারফরম্যান্স ভালো)

  • IntSupplier
  • LongSupplier
  • DoubleSupplier
  • BooleanSupplier


উদাহরণ

IntSupplier randomInt =
        () -> new Random().nextInt(100);

System.out.println(randomInt.getAsInt());


Supplier বনাম Consumer

SupplierConsumer
Input নেইInput আছে
Output দেয়Output নেই
Data produceData consume


বাস্তব Spring Boot উদাহরণ

Supplier<UUID> uuidSupplier = UUID::randomUUID;

Order order = new Order();
order.setId(uuidSupplier.get());


Supplier chaining আছে কি?

❌ নেই
👉 কারণ Supplier কোনো input নেয় না
✔ chaining দরকার হলে Function ব্যবহার করুন