Java 两种不同收益类型的完全期货组合结果
我有两个不同的CompletableFuture,我喜欢并行运行(每个都有不同的返回类型),然后合并它们的结果:Java 两种不同收益类型的完全期货组合结果,java,completable-future,Java,Completable Future,我有两个不同的CompletableFuture,我喜欢并行运行(每个都有不同的返回类型),然后合并它们的结果: CompletableFuture<Person> person = personDB.asyncCall(..); CompletableFuture<Dog> dog = dogDB.asyncCall(...); 我试着用 CompletableFuture<Void> combinedFuture = CompletableFut
CompletableFuture<Person> person = personDB.asyncCall(..);
CompletableFuture<Dog> dog = dogDB.asyncCall(...);
我试着用
CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(perons, dog);
combinedFuture.thenApply(aVoid -> {
// now what?
});
CompletableFuture combinedFuture=CompletableFuture.allOf(peron,dog);
组合未来。然后应用(避免->{
//现在怎么办?
});
但是这里有点糟糕。使用get()方法等待它们完成
CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(perons, dog);
combinedFuture.get(); // wait for all of them to complete
return dog.getName() + person.getName();
CompletableFuture combinedFuture=CompletableFuture.allOf(peron,dog);
combinedFuture.get();//等待它们全部完成
return dog.getName()+person.getName();
看
注意CompletableFuture.allOf()的返回类型是
完全的未来。这种方法的局限性在于
不返回所有期货的组合结果。相反,你必须
手动从Futures获取结果。幸运的是,
CompletableFuture.join()方法和Java8StreamsAPI使其
简单:
如果要在之后立即对其调用
get()
,那么使用allOf()
是没有意义的。对每个单独的未来调用get()
,效果完全相同,而且您仍然在这样做。
CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(perons, dog);
combinedFuture.get(); // wait for all of them to complete
return dog.getName() + person.getName();