thenApply
및 thenCompose
의 메서드입니다 CompletableFuture
. .NET으로 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
반드시 a 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
이것은 Javascript의 Promise
. Promise.then
값 또는 값을 반환하는 함수를 사용할 수 있습니다 Promise
. 이 두 메소드가 Java에서 다른 이름을 갖는 이유는 일반 삭제 때문 입니다. 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
는 ISflatMap
의CompletableFuture
. 당신thenCompose
은CompletableFuture<CompletableFuture<..>>
.