Java 8-এ CompletableFuture ক্লাসটি অ্যাসিঙ্ক্রোনাস কম্পিউটেশন এবং তার ফলাফল পরিচালনার জন্য ব্যবহৃত হয়। যখন একাধিক অ্যাসিঙ্ক্রোনাস অপারেশন একত্রিত করা প্রয়োজন, তখন thenApply(), thenAccept(), এবং thenCompose() অত্যন্ত কার্যকরী মেথড। এগুলো আপনাকে অ্যাসিঙ্ক্রোনাস টাস্কের ফলাফল সঠিকভাবে প্রক্রিয়া করতে এবং বিভিন্ন অ্যাসিঙ্ক্রোনাস অপারেশন একসাথে পরিচালনা করতে সহায়তা করে।
এখানে প্রতিটি মেথডের ব্যাখ্যা এবং উদাহরণ দেওয়া হলো।
১. thenApply()
thenApply() মেথডটি CompletableFuture এর ফলাফল গ্রহণ করে এবং একটি ট্রান্সফরমেশন ফাংশন প্রয়োগ করে নতুন একটি CompletableFuture তৈরি করে। এটি মূলত কোন ফিউচার এর ফলাফলকে পরিবর্তন করতে ব্যবহৃত হয়।
- ব্যবহার: আপনি যদি একটি ফিউচারের ফলাফল নিয়ে কোন কিছু পরিবর্তন করতে চান এবং তারপরে নতুন ফিউচার পেতে চান, তখন
thenApply()ব্যবহার করতে হবে।
thenApply() উদাহরণ:
import java.util.concurrent.CompletableFuture;
public class ThenApplyExample {
public static void main(String[] args) {
// একটি CompletableFuture তৈরি
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> 5);
// thenApply() ব্যবহার করে ফলাফল ট্রান্সফর্ম করা
CompletableFuture<Integer> transformedFuture = future.thenApply(result -> result * 2);
// transformedFuture থেকে ফলাফল নেয়া
transformedFuture.thenAccept(result -> System.out.println("Transformed result: " + result));
}
}ব্যাখ্যা:
CompletableFuture.supplyAsync()একটি অ্যাসিঙ্ক্রোনাস অপারেশন তৈরি করে যা5মান প্রদান করবে।thenApply()ফাংশনটি ফিউচারের ফলাফলকে* 2করে পরিবর্তন করবে।thenAccept()এটি প্রিন্ট করবে:Transformed result: 10।
Output:
Transformed result: 10২. thenAccept()
thenAccept() মেথডটি CompletableFuture এর ফলাফল গ্রহণ করে এবং তা সাইড-এফেক্ট হিসেবে ব্যবহার করে। এই মেথডটি কোন নতুন CompletableFuture ফেরত দেয় না, এটি শুধুমাত্র ফলাফল ব্যবহারের উদ্দেশ্যে।
- ব্যবহার: যখন আপনি শুধুমাত্র ফলাফলকে গ্রহণ করে কোন সাইড-এফেক্ট (যেমন প্রিন্ট, লগ করা) তৈরি করতে চান, তখন
thenAccept()ব্যবহার করবেন।
thenAccept() উদাহরণ:
import java.util.concurrent.CompletableFuture;
public class ThenAcceptExample {
public static void main(String[] args) {
// একটি CompletableFuture তৈরি
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> 100);
// thenAccept() ব্যবহার করে ফলাফল গ্রহন করা এবং প্রিন্ট করা
future.thenAccept(result -> System.out.println("Consumed result: " + result));
}
}ব্যাখ্যা:
CompletableFuture.supplyAsync()একটি অ্যাসিঙ্ক্রোনাস অপারেশন তৈরি করে যা100প্রদান করবে।thenAccept()ফলাফল গ্রহণ করবে এবং প্রিন্ট করবে:Consumed result: 100।
Output:
Consumed result: 100৩. thenCompose()
thenCompose() মেথডটি একাধিক অ্যাসিঙ্ক্রোনাস অপারেশন একত্রিত করতে ব্যবহৃত হয়, যেখানে দ্বিতীয় অ্যাসিঙ্ক্রোনাস অপারেশনটির ফলাফল প্রথম অপারেশনের ফলাফল দিয়ে শুরু হয়। এটি সাধারণত একাধিক স্টেপের অ্যাসিঙ্ক্রোনাস অপারেশন চেইন করার জন্য ব্যবহৃত হয়।
- ব্যবহার: যখন আপনি একটি ফিউচারের ফলামের উপর ভিত্তি করে আরেকটি নতুন অ্যাসিঙ্ক্রোনাস অপারেশন শুরু করতে চান, তখন
thenCompose()ব্যবহার করবেন।
thenCompose() উদাহরণ:
import java.util.concurrent.CompletableFuture;
public class ThenComposeExample {
public static void main(String[] args) {
// একটি CompletableFuture তৈরি
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> 5);
// thenCompose() ব্যবহার করে আরও একটি অ্যাসিঙ্ক্রোনাস কাজ
CompletableFuture<Integer> finalResult = future.thenCompose(result ->
CompletableFuture.supplyAsync(() -> result * 2)
);
// finalResult থেকে ফলাফল নেয়া
finalResult.thenAccept(result -> System.out.println("Final result: " + result));
}
}ব্যাখ্যা:
CompletableFuture.supplyAsync()একটি অ্যাসিঙ্ক্রোনাস অপারেশন তৈরি করে যা5প্রদান করবে।thenCompose()আরেকটি অ্যাসিঙ্ক্রোনাস অপারেশন (যা5 * 2করবে) চালাবে।thenAccept()চূড়ান্ত ফলাফলটি প্রিন্ট করবে:Final result: 10।
Output:
Final result: 10Key Differences Between thenApply(), thenAccept(), and thenCompose()
| Method | Use Case | Returns New CompletableFuture? | Example Use Case |
|---|---|---|---|
thenApply() | যখন আপনি একটি ফিউচারের ফলাফলকে পরিবর্তন করতে চান। | Yes | ফলাফল পরিবর্তন করে নতুন ফিউচার তৈরি করা (যেমন, ২ গুণ করা) |
thenAccept() | যখন আপনি শুধুমাত্র ফলাফল গ্রহণ করে কোন সাইড-এফেক্ট করতে চান। | No | ফলাফল প্রিন্ট বা লগ করা |
thenCompose() | যখন আপনি একাধিক অ্যাসিঙ্ক্রোনাস অপারেশন চেইন করতে চান। | Yes | একাধিক অ্যাসিঙ্ক্রোনাস কাজের মধ্যে একটির ফলাফল দিয়ে পরবর্তী কাজ শুরু করা |
Conclusion
thenApply(): যখন আপনি ফিউচারের ফলাফলকে পরিবর্তন করতে চান।thenAccept(): যখন আপনি শুধুমাত্র ফলাফল গ্রহণ করে কোনো সাইড-এফেক্ট (যেমন প্রিন্ট, লগ) করতে চান।thenCompose(): যখন আপনি একাধিক অ্যাসিঙ্ক্রোনাস অপারেশন চেইন করতে চান, যেখানে পরবর্তী অপারেশন প্রথমটির ফলাফলের উপর নির্ভর করে।
এই তিনটি মেথডই CompletableFuture এর মাধ্যমে অ্যাসিঙ্ক্রোনাস অপারেশনগুলিকে আরও কার্যকরভাবে পরিচালনা করতে সাহায্য করে।
Read more