Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 两种不同收益类型的完全期货组合结果_Java_Completable Future - Fatal编程技术网

Java 两种不同收益类型的完全期货组合结果

Java 两种不同收益类型的完全期货组合结果,java,completable-future,Java,Completable Future,我有两个不同的CompletableFuture,我喜欢并行运行(每个都有不同的返回类型),然后合并它们的结果: CompletableFuture<Person> person = personDB.asyncCall(..); CompletableFuture<Dog> dog = dogDB.asyncCall(...); 我试着用 CompletableFuture<Void> combinedFuture = CompletableFut

我有两个不同的CompletableFuture,我喜欢并行运行(每个都有不同的返回类型),然后合并它们的结果:

 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();