我正在研究使用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