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और के बीच का अंतर समझते हैं ? है और का है । आप होने से बचने के लिए उपयोग करते हैं ।flatMapStreamthenApplymapthenComposeflatMapCompletableFuturethenComposeCompletableFuture<CompletableFuture<..>>