Java8函数式编程入门 互动版

组合多个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");
}

输出结果:

query

用thenCombine方式组合多个CompletableFuture,计算随机生成20个1~100的随机数并求和.