thenApplyএবং thenComposeএর পদ্ধতি CompletableFuture। যখন আপনি CompleteableFutureএর সাথে ফলাফলের জন্য কিছু করার ইচ্ছা করছেন তখন সেগুলি ব্যবহার করুন Function।
thenApplyএবং thenComposeউভয়ই CompletableFutureতাদের নিজস্ব ফলাফল হিসাবে ফিরে আসে । আপনি একাধিক thenApplyবা thenComposeএকসাথে চেইন করতে পারেন । Functionপ্রতিটি কলটিতে একটি সরবরাহ করুন, যার ফলাফলটি পরের ইনপুট হবে Function।
Functionআপনি কখনও কখনও সরবরাহকৃত কিছু সিঙ্ক্রোনাস নজর দিতে হবে। আপনার রিটার্নের ধরনটি Functionনন- Futureটাইপ হওয়া উচিত । এই ক্ষেত্রে আপনার ব্যবহার করা উচিত thenApply।
CompletableFuture.completedFuture(1)
.thenApply((x)->x+1) // adding one to the result synchronously, returns int
.thenApply((y)->System.println(y)); // value of y is 1 + 1 = 2
অন্যান্য সময় আপনি এতে অ্যাসিক্রোনাস প্রসেসিং করতে চাইতে পারেন Function। সেক্ষেত্রে আপনার ব্যবহার করা উচিত thenCompose। আপনার রিটার্নের ধরনটি Functionএকটি হওয়া উচিত CompletionStage। Functionশৃঙ্খলে পরেরটি CompletionStageইনপুট হিসাবে এর ফলস্বরূপ পাবে , এইভাবে আন-র্যাপিং CompletionStage।
// addOneAsync may be implemented by using another thread, or calling a remote method
abstract CompletableFuture<Integer> addOneAsync(int input);
CompletableFuture.completedFuture(1)
.thenCompose((x)->addOneAsync(x)) // doing something asynchronous, returns CompletableFuture<Integer>
.thenApply((y)->System.println(y)); // y is an Integer, the result of CompletableFuture<Integer> above
এটি জাভাস্ক্রিপ্ট-এর অনুরূপ ধারণা Promise। Promise.thenএমন কোনও ফাংশন গ্রহণ করতে পারে যা হয় একটি মান বা একটি মানের একটি Promiseপ্রদান করে। জাভাতে এই দুটি পদ্ধতির আলাদা নাম থাকার কারণটি জেনেরিক মুছে ফেলার কারণ । Function<? super T,? extends U> fnএবং Function<? super T,? extends CompletionStage<U>> fnএকই রানটাইম টাইপ হিসাবে বিবেচিত হয় - Function। সুতরাং thenApplyএবং thenComposeআলাদাভাবে নামকরণ করতে হবে, বা জাভা সংকলক অনুরূপ পদ্ধতি স্বাক্ষর সম্পর্কে অভিযোগ করবে। জাভাস্ক্রিপ্টটি জাভা স্ক্রিপ্ট Promise.thenদুটি অংশে প্রয়োগ করা হয়েছে - thenApplyএবং thenCompose- জাভা স্ক্রিপ্ট।
আপনি যদি কোনও সম্পর্কিত ফাংশন সম্পর্কে বিভ্রান্ত হন তবে আপনি আমার অন্যান্য উত্তরটি পড়তে পারেন thenApplyAsync।
mapএবংflatMapএStream?thenApplyহয়mapএবংthenComposeহয়flatMapএরCompletableFuture। আপনিthenComposeথাকার এড়ানোর জন্য ব্যবহার করুনCompletableFuture<CompletableFuture<..>>।