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
ได้รับการพิจารณาประเภทเดียวกัน Runtime Function
- ดังนั้นthenApply
และthenCompose
ต้องตั้งชื่อให้ชัดเจนมิฉะนั้นคอมไพเลอร์ Java จะบ่นเกี่ยวกับลายเซ็นวิธีการที่เหมือนกัน ผลลัพธ์สุดท้ายคือ Javascript Promise.then
ถูกนำไปใช้ในสองส่วน - thenApply
และthenCompose
- ใน Java
คุณสามารถอ่านคำตอบอื่น ๆ ของฉันthenApplyAsync
ถ้าคุณยังสับสนเกี่ยวกับฟังก์ชั่นที่เกี่ยวข้อง
map
และflatMap
ในStream
หรือไม่?thenApply
เป็นmap
และthenCompose
เป็นของflatMap
CompletableFuture
คุณใช้thenCompose
เพื่อหลีกเลี่ยงการมีCompletableFuture<CompletableFuture<..>>
.