在我的应用中有三种不同的方法。所有的人都会返回CompletableFuture<SomeType>。我想并行执行方法1和方法2。在完成方法1和方法2之后,我想用方法1和方法2返回值的参数触发方法3。
代码示例:
CompletableFuture<Request> future1 = RequestConverter.Convert(requestDto);
CompletableFuture<String> future2 = tokenProvider.getAuthToken();
CompletableFuture<CompletableFuture<String>> future3 =
future1.thenCombine(future2,(request,token) ->
requestProcessor.Process(request,token)); 但是上面的代码的问题是我得到了一个CompletableFuture of CompletableFuture。我想避免这种情况,得到一个简单的CompletableFuture<String>而不阻塞。这个是可能的吗?
发布于 2018-01-09 13:29:39
假设您有Pair类。
class Pair<L, R> {
public final L left;
public final R right;
public Pair(L left, R right) {
this.left = left;
this.right = right;
}
}然后你可以先组合成一对,然后再作曲。
CompletableFuture<Request> future1 = RequestConverter.Convert(requestDto);
CompletableFuture<String> future2 = tokenProvider.getAuthToken();
CompletableFuture<String> future3 = future1
.thenCombine(future2, Pair::new)
.thenCompose(pair -> requestProcessor.Process(pair.left, pair.right));发布于 2018-01-09 23:34:31
由于没有将thenCombine()和thenCompose()结合在一起的方法,所以可以使用thenCompose()来解压缩来自thenCombine()的嵌套CompletableFuture。
CompletableFuture<CompletableFuture<String>> future3 =
future1.thenCombine(future2, (request,token) ->
requestProcessor.Process(request,token));
CompletableFuture<String> future4 = future3.thenCompose(c -> c);https://stackoverflow.com/questions/48164092
复制相似问题