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
| Interface | Input | Output |
|---|---|---|
| Consumer | T | void |
| Function | T | R |
| Predicate | T | boolean |
| Supplier | none | T |