Java 将Promise.sequence(promises.map()转换为CompletableStage API

Java 将Promise.sequence(promises.map()转换为CompletableStage API,java,playframework,promise,completable-future,Java,Playframework,Promise,Completable Future,我已经咨询过但没有帮助我的链接: 我正在尝试将现有应用程序从Play framework 2.4升级到Play framework 2.5。这需要将所有Promise更改为CompletionStage。到目前为止还不错,但我对以下几行有点纠结: List<Promise<WSResponse>> promises = new ArrayList<Promise<WSResponse>>(); for (TargetRequest tRe

我已经咨询过但没有帮助我的链接:

我正在尝试将现有应用程序从Play framework 2.4升级到Play framework 2.5。这需要将所有
Promise
更改为
CompletionStage
。到目前为止还不错,但我对以下几行有点纠结:

List<Promise<WSResponse>> promises = new ArrayList<Promise<WSResponse>>();
for (TargetRequest tRequest : targets) {
    promises.add(/*get one promise*/);
}
return Promise.sequence(promises).map(new Function<List<WSResponse>, WSResponse>() {
    @Override
    public WSResponse apply(final List<WSResponse> responses) throws Throwable {
        return responses.isEmpty() ? null : responses.get(0);
    }
});
List promissions=new ArrayList();
for(TargetRequest tRequest:targets){
承诺。添加(/*获得一个承诺*/);
}
返回Promise.sequence(promises.map)(新函数(){
@凌驾
公共WSResponse apply(最终列表响应)抛出可丢弃{
返回responses.isEmpty()?null:responses.get(0);
}
});
如您所见,这些行从
列表
转到
承诺
,首先从
列表
转到
承诺
,然后如果
列表
为空,则返回null;如果列表不为空,则返回列表的第一行

如何使用
CompletableStage
而不是
Promise
来完成所有这些?
sequence().map()
方法已被弃用。我使用
CompletableFuture.allOf()
toArray()
stream()
尝试了一些东西,但没有任何结论。

最终得到了:

    List<CompletionStage<WSResponse>> futures = new ArrayList<CompletionStage<WSResponse>>();
    for (TargetRequest tRequest : targets) {
      futures.add(/*get one future*/);
    }
    return CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()]))
        .thenApply(v -> futures.stream().map(t -> t.toCompletableFuture().join())
            .collect(Collectors.toList()))
        .thenApply(responses -> responses.isEmpty() ? null : responses.get(0));
List futures=new ArrayList();
for(TargetRequest tRequest:targets){
futures.add(/*获取一个futures*/);
}
return CompletableFuture.allOf(futures.toArray(新的CompletableFuture[futures.size()]))
.thenApply(v->futures.stream().map(t->t.toCompletableFuture().join())
.collect(收集器.toList())
.thenApply(responses->responses.isEmpty()?null:responses.get(0));
终于得到了:

    List<CompletionStage<WSResponse>> futures = new ArrayList<CompletionStage<WSResponse>>();
    for (TargetRequest tRequest : targets) {
      futures.add(/*get one future*/);
    }
    return CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()]))
        .thenApply(v -> futures.stream().map(t -> t.toCompletableFuture().join())
            .collect(Collectors.toList()))
        .thenApply(responses -> responses.isEmpty() ? null : responses.get(0));
List futures=new ArrayList();
for(TargetRequest tRequest:targets){
futures.add(/*获取一个futures*/);
}
return CompletableFuture.allOf(futures.toArray(新的CompletableFuture[futures.size()]))
.thenApply(v->futures.stream().map(t->t.toCompletableFuture().join())
.collect(收集器.toList())
.thenApply(responses->responses.isEmpty()?null:responses.get(0));

CompletableFuture实现CompletionStage.CompletableFuture实现CompletionStage。