【发布时间】:2017-03-22 09:01:05
【问题描述】:
假设我有 3 个下载,框架为可完成的期货:
CompletableFuture<Doc> dl1 = CompletableFuture.supplyAsync(() -> download("file1"));
CompletableFuture<Doc> dl2 = CompletableFuture.supplyAsync(() -> download("file2"));
CompletableFuture<Doc> dl3 = CompletableFuture.supplyAsync(() -> download("file3"));
那么所有这些都需要以相同的方式处理
CompletableFuture<String> s1 = dl1.thenApply(Doc::getFilename);
CompletableFuture<String> s2 = dl2.thenApply(Doc::getFilename);
CompletableFuture<String> s3 = dl3.thenApply(Doc::getFilename);
您可以想象要同时应用多个函数。
根据 DRY 原则,这个例子似乎不合适。因此,我正在寻找一种解决方案,以仅定义 1 个并行执行 3 次的工作流。
如何做到这一点?
我试过allOf,但有两个问题1)它开始阻塞,2)返回类型只能run填充而不是处理它。
【问题讨论】:
-
声明新方法首先调用下载,然后调用getFilename
-
您是否考虑过将文件放入列表中然后对其进行迭代?
标签: java concurrency java-8 java.util.concurrent completable-future