thenApply
ve thenCompose
yöntemleridir CompletableFuture
. A CompleteableFuture
ile sonucunu elde etmek için bir şey yapmak istediğinizde bunları kullanın Function
.
thenApply
ve thenCompose
her ikisi de CompletableFuture
kendi sonucu olarak a döndürür . Birden çok thenApply
veya thenCompose
birlikte zincirleyebilirsiniz . Bir tedarik Function
edilen sonuç bir sonraki giriş olacak Her arama için Function
.
Function
Bazen verilen eşzamanlı bir şeyler yapmak gerekiyor. Dönüş türünüzün türü Function
olmayan olmalıdır Future
. Bu durumda kullanmalısınız 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
Diğer zamanlarda bunun içinde eşzamansız işlem yapmak isteyebilirsiniz Function
. Bu durumda kullanmalısınız thenCompose
. Dönüş türünüz Function
bir CompletionStage
. Function
Zincirdeki bir sonraki , bunun sonucunu CompletionStage
girdi olarak alacak , böylece 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
Bu, Javascript'inkine benzer bir fikirdir Promise
. Promise.then
bir değer veya bir değer döndüren bir işlevi kabul edebilir Promise
. Bu iki yöntemin Java'da farklı isimlere sahip olmasının nedeni, genel silme işleminden kaynaklanmaktadır . Function<? super T,? extends U> fn
ve Function<? super T,? extends CompletionStage<U>> fn
aynı Runtime türü olarak kabul edilir - Function
. Bu nedenle thenApply
ve thenCompose
açıkça adlandırılması gerekir, yoksa Java derleyicisi aynı yöntem imzalarından şikayet ederdi. Sonuçta varlık, JavaScript adlı Promise.then
iki parça halinde uygulanmaktadır - thenApply
ve thenCompose
- Java.
İlgili işlev hakkında kafanız karışırsa diğer cevabımı da okuyabilirsiniz thenApplyAsync
.
map
veflatMap
deStream
?thenApply
olduğumap
vethenCompose
olduğuflatMap
birCompletableFuture
. SahipthenCompose
olmaktan kaçınmak için kullanırsınCompletableFuture<CompletableFuture<..>>
.