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<..>>