【发布时间】:2020-12-27 12:33:06
【问题描述】:
我正在尝试对 CompletableFuture 任务列表执行一些转换,但由于缺乏经验而面临一些问题。我有一个 CompletableFuture 列表,但我无法对其执行进一步的转换。
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class thenapply {
public static void main(String[] args) throws InterruptedException, ExecutionException {
List<Integer> list = Arrays.asList(5, 9, 14);
final int sum = 0;
List<CompletableFuture<Integer>> ans = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
final int finali = i;
ans.add(CompletableFuture.supplyAsync(() -> square(list.get(finali))));
}
System.out.println(ans.stream()
.mapToInt(Integer::intValue).sum());
}
private static int square(int a) {
return a * a;
}
}
我知道.mapToInt(Integer::intValue) 错了,但不知道如何改正。此外,我读到我们应该使用allOf,但我不确定如何在这里实现它。
请帮忙。
【问题讨论】:
-
有numerous methods you can use。例如,可能是
join、thenAccept、thenAcceptAsync等。 -
.mapToInt(CompletableFuture::join)但您应该知道,使用CompletableFuture执行这种粒度的并行操作效率低下,编写起来也很复杂。
标签: java java-8 concurrency