使用CompletableFuture进行Zip处理

时间:2017-10-17 18:17:32

标签: java java-8 rx-java

我想知道使用zip执行CompletableFuture的官方机制。 到目前为止,我只使用thenCombine运算符。这是我的例子。

@Test
public void zip() throws InterruptedException {
    CompletableFuture<Either<Integer, String>> completableFuture = CompletableFuture.supplyAsync(this::getValue);
    CompletableFuture<Either<Integer, String>> completableFuture1 = CompletableFuture.supplyAsync(this::getValue);
    CompletableFuture<Either<Integer, String>> completableFuture2 = CompletableFuture.supplyAsync(this::getValue);

    completableFuture
            .thenCombine(completableFuture1, (c1, c2) -> new Right<>(c1.right().get() + "|" + c2.right().get()))
            .thenCombine(completableFuture2, (c1, c2) -> new Right<>(c1.right().get() + "|" + c2.right().get()))

            .whenComplete((result, throwable) -> System.out.println(result.right().get()));
    Thread.sleep(2000);
}

对我而言,thenCombine运算符的使用更像merge的{​​{1}}运算符。

知道是否有更好的方法吗?

我只想并行运行三个进程并压缩结果。

问候。

0 个答案:

没有答案