thenApply
dan thenCompose
merupakan metode CompletableFuture
. Gunakan jika Anda berniat melakukan sesuatu untuk mendapatkan CompleteableFuture
hasil dengan a Function
.
thenApply
dan thenCompose
keduanya mengembalikan CompletableFuture
sebagai hasil mereka sendiri. Anda dapat merantai beberapa thenApply
atau thenCompose
bersama. Berikan a Function
ke setiap panggilan, yang hasilnya akan menjadi masukan ke panggilan berikutnya Function
.
Yang Function
Anda berikan terkadang perlu melakukan sesuatu secara sinkron. Tipe pengembalian Anda Function
harus non- Future
tipe. Dalam hal ini Anda harus menggunakan 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 lain waktu Anda mungkin ingin melakukan pemrosesan asinkron dalam hal ini Function
. Dalam hal ini Anda harus menggunakan thenCompose
. Jenis pengembalian Anda Function
harus a CompletionStage
. Function
Rantai berikutnya akan mendapatkan hasil CompletionStage
sebagai masukan, sehingga membuka bungkus 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
Ini adalah ide yang mirip dengan Javascript Promise
. Promise.then
dapat menerima fungsi yang mengembalikan nilai atau Promise
nilai. Alasan mengapa kedua metode ini memiliki nama yang berbeda di Java adalah karena penghapusan yang umum . Function<? super T,? extends U> fn
dan Function<? super T,? extends CompletionStage<U>> fn
dianggap sebagai jenis Runtime yang sama - Function
. Jadi thenApply
dan thenCompose
harus diberi nama yang berbeda, atau kompiler Java akan mengeluh tentang tanda tangan metode yang identik. Hasil akhirnya adalah, Javascript Promise.then
diimplementasikan dalam dua bagian - thenApply
danthenCompose
- di Java.
Anda dapat membaca jawaban saya yang lain jika Anda juga bingung tentang fungsi terkait thenApplyAsync
.
map
danflatMap
dalamStream
?thenApply
adalahmap
danthenCompose
adalahflatMap
dariCompletableFuture
. Anda gunakanthenCompose
untuk menghindariCompletableFuture<CompletableFuture<..>>
.