Consumer Functional Interface


Consumer কী?

Consumer হলো Java-এর একটি Functional Interface, যা একটি ইনপুট গ্রহণ করে কিন্তু কোনো মান রিটার্ন করে না

সহজ কথায়:
Consumer = Input → Action (No Return)

উদাহরণ:

  • Print করা
  • Log লেখা
  • Database-এ save করা
  • Email পাঠানো


Consumer Interface-এর গঠন

@FunctionalInterface
public interface Consumer<T> {
    void accept(T t);
}

এখানে:

  • T = ইনপুট টাইপ
  • accept() = কাজটি করে, কিছু রিটার্ন করে না


Consumer কেন দরকার?

যখন:

  • শুধু কোনো কাজ করতে হবে
  • ডাটার উপর side-effect দরকার
  • Stream-এর forEach() ব্যবহার করতে হবে


সহজ Consumer উদাহরণ

সংখ্যা print করা

Consumer<Integer> print =
        n -> System.out.println(n);

print.accept(10);


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

সবচেয়ে বেশি ব্যবহার হয় এখানে।

List<String> names = List.of("Rahim", "Karim", "Amin");

names.stream()
     .forEach(name -> System.out.println(name));

এখানে forEach()-এর ভিতরের Lambda আসলে একটি Consumer


আলাদা Consumer লিখে ব্যবহার

Consumer<String> printer =
        System.out::println;

names.forEach(printer);


Object-এর উপর Consumer (বাস্তব উদাহরণ)

User ক্লাস

class User {
    String name;
    boolean active;
}


User log করা

Consumer<User> logUser =
        u -> System.out.println(u.name + " logged");


Consumer chaining – andThen()

একাধিক কাজ একসাথে করতে।

Consumer<String> print =
        System.out::println;

Consumer<String> printLength =
        s -> System.out.println(s.length());

Consumer<String> combined =
        print.andThen(printLength);

combined.accept("Java");

Output:

Java
4


Multiple Consumer (বাস্তব কেস)

Consumer<User> saveToDb = userRepository::save;
Consumer<User> sendEmail = emailService::send;

Consumer<User> finalConsumer =
        saveToDb.andThen(sendEmail);


BiConsumer – দুইটি ইনপুট

BiConsumer<String, Integer> printNameAge =
        (name, age) -> System.out.println(name + " " + age);

printNameAge.accept("Rahim", 30);


Consumer বনাম Function বনাম Predicate

InterfaceInputOutput
ConsumerTvoid
FunctionTR
PredicateTboolean
SuppliernoneT