如何执行CompletableFuture数组并合并其结果

时间:2017-07-21 07:53:43

标签: java-8 completable-future

我正在研究使用Java 8 CompletableFuture

我尝试编码的过程如下: -

提取密钥

1)。执行一个返回CompletableFuture

List<String>

提取数据

2)。完成步骤1)。并行执行多个CompletableFutures,并接受此List<String>s作为输入。在步骤2)中执行的每个CompletableFuture。返回唯一的值对象列表。

合并数据

3)。在步骤2中执行所有CompletableFutures后。已经完成我希望结合价值对象的各个列表并完成整个过程。

我工作的代码只能处理在步骤2)中执行的两个CompletableFutures。如下: -

final CompletableFuture<List<String>> extractor = get("https://example.com//source/url");

final CompletableFuture<List<Documentable>> valueObjectList1 = extractor.thenApplyAsync(s -> callTypeADocumentable(s));
final CompletableFuture<List<Documentable>> valueObjectList2 = extractor.thenApplyAsync(s -> callTypeBCDocumentable(s));

valueObjectList1.thenCombineAsync(valueObjectList2, (c, e) -> consumeBothDocumentable(c, e)).thenAccept(x -> finish(x));

我希望的解决方案是实现这一目标: -

final CompletableFuture<List<String>> extractor = get("https://example.com//source/url");

@SuppressWarnings("unchecked")
final CompletableFuture<List<Documentable>>[] completableFutures = new CompletableFuture[ENDPOINT.values().length];

int index = 0;

for (ENDPOINT endpoint : ENDPOINT.values()) {

    final CompletableFuture<List<Documentable>> valueObjectList = extractor.thenApplyAsync(s -> endpoint.contactEndpoit(s));

        completableFutures[index++] = valueObjectList;

    }

completableFutures[0].allOf(completableFutures[1], completableFutures[2], ...);

如何合并多个CompletableFutures(例如两个以上),方式与我对两个CompletableFutures

的方式相同

0 个答案:

没有答案