thenApplydan thenComposemerupakan metode CompletableFuture. Gunakan jika Anda berniat melakukan sesuatu untuk mendapatkan CompleteableFuturehasil dengan a Function.
thenApplydan thenComposekeduanya mengembalikan CompletableFuturesebagai hasil mereka sendiri. Anda dapat merantai beberapa thenApplyatau thenComposebersama. Berikan a Functionke setiap panggilan, yang hasilnya akan menjadi masukan ke panggilan berikutnya Function.
Yang FunctionAnda berikan terkadang perlu melakukan sesuatu secara sinkron. Tipe pengembalian Anda Functionharus non- Futuretipe. 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 Functionharus a CompletionStage. FunctionRantai berikutnya akan mendapatkan hasil CompletionStagesebagai 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.thendapat menerima fungsi yang mengembalikan nilai atau Promisenilai. Alasan mengapa kedua metode ini memiliki nama yang berbeda di Java adalah karena penghapusan yang umum . Function<? super T,? extends U> fndan Function<? super T,? extends CompletionStage<U>> fndianggap sebagai jenis Runtime yang sama - Function. Jadi thenApplydan thenComposeharus diberi nama yang berbeda, atau kompiler Java akan mengeluh tentang tanda tangan metode yang identik. Hasil akhirnya adalah, Javascript Promise.thendiimplementasikan dalam dua bagian - thenApplydanthenCompose - di Java.
Anda dapat membaca jawaban saya yang lain jika Anda juga bingung tentang fungsi terkait thenApplyAsync.
mapdanflatMapdalamStream?thenApplyadalahmapdanthenComposeadalahflatMapdariCompletableFuture. Anda gunakanthenComposeuntuk menghindariCompletableFuture<CompletableFuture<..>>.