gpt4 book ai didi

java - 如何将 completableFuture.supplyAsync() 的返回类型分配给对象?

转载 作者:行者123 更新时间:2023-11-29 08:23:18 26 4
gpt4 key购买 nike

我在 foreach 循环中定义了 completableFuture.supplyAsync(),所以每个条目(每个异步任务)都添加一个列表,我需要从 completableFuture.supplyAsync() 获取最终列表(在所有异步任务添加列表之后)。如何实现这个?

代码片段:

    unporcessedList.forEach(entry -> {                       
CompletableFuture<List<ChangeLog>> cf =
CompletableFuture.supplyAsync((Supplier<List<ChangeLog>>) () -> {
mongoDBHelper.processInMongo(entry, getObject(entry, map),entryList);
return entryList;
}, executor);
});

最佳答案

非阻塞版本

一般例子:

    List<String> entries = new ArrayList<>(2);
entries.add("first");
entries.add("second");

List<CompletableFuture<String>> completableFutures = entries.stream()
.map((entry) -> {
return CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(new Random().nextInt(5000) + 500);
} catch (InterruptedException e) {
e.printStackTrace();
}
return entry.concat(String.valueOf(entry.length()));
}).thenApply((e) -> new StringBuilder(e).reverse().toString());
}
).collect(Collectors.toList());

CompletableFuture
.allOf(completableFutures.toArray(new CompletableFuture[completableFutures.size()]))
.thenApply((v) -> completableFutures.stream().map((cf) -> cf.join()))
.get()
.forEach(System.out::println);

您的案例:

    List<CompletableFuture<List<ChangeLog>>> completableFutures = unporcessedList.stream()
.map((entry) -> {
return CompletableFuture.supplyAsync((Supplier<List<ChangeLog>>) () -> {
mongoDBHelper.processInMongo(entry, getObject(entry, map), entryList);
return entryList;
}, executor);
}
).collect(Collectors.toList());

CompletableFuture
.allOf(completableFutures.toArray(new CompletableFuture[completableFutures.size()]))
.thenApply((v) -> completableFutures.stream().map((cf) -> cf.join()))
.get()
.forEach(System.out::println);

关于java - 如何将 completableFuture.supplyAsync() 的返回类型分配给对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55515473/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com