组合多个CompletableFuture(二)
另一种方法使用thenCombine()。
//jdk源码
public <U,V> CompletableFuture<V> thenCombine(
CompletionStage<? extends U> other,
BiFunction<? super T,? super U,? extends V> fn) {
return biApplyStage(null, other, fn);
}
例子:计算10的平方,50除以2,然后将二者的结果求和。
thenCombine()方法首先完成当前CompletableFuture和other的执行,接着,将这两者的执行结果传递给BiFunction,并返回BiFunction实例的CompletableFuture对象。
private void test() {
CompletableFuture<Integer> future1= CompletableFuture.supplyAsync(()->calculate(10));
CompletableFuture<Integer> future2= CompletableFuture.supplyAsync(()->divi(50));
CompletableFuture<Void> cf = future1.thenCombine(future2,(x,y) -> (x + y))
.thenAccept(System.out::println);
try {
cf.get();
}catch (Exception e) {
e.printStackTrace();
}
System.out.println("exit");
}
输出结果:
用thenCombine方式组合多个CompletableFuture,计算随机生成20个1~100的随机数并求和.