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
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。