在未来可完成的循环中从数据库获取结果

Get result from db in a loop with completable future

我正在使用 Spring Boot 和 Spring Data Jpa,我的逻辑由数据库中的 3 个请求组成,我想 运行 并行处理。我想为此目的使用 CompletableFuture。

最后我需要根据 5 db 查询 运行s 的结果构建响应对象。目前我正在 运行循环其中的 3 个。

所以我创建了 CompletableFuture

CompletableFuture<Long> totalFuture = CompletableFuture.supplyAsync(() ->  myRepository.getTotal());

CompletableFuture<Long> countFuture = CompletableFuture.supplyAsync(() ->  myRepository.getCount());

然后我计划在这个未来使用 .allOf。但是我有循环调用的问题。如何重写它以在每个请求中使用 callable 我需要从请求中传递值,然后按键排序到映射中?

Map<String, Integer> groupcount = new HashMap<>();
    request.ids().forEach((key, value) -> count.put(key, myRepository
            .getGroupCountId(value));

为了更透彻地解释,我发布了一个我想链接的代码片段,但目前它是这样工作的。

List<CompletableFuture<Void>> completableFutures = new ArrayList<>();
Map<String, Integer> groupcount = new ConcurrentHashMap<>();
        for (var id : request.Ids().entrySet()) {
            completableFutures.add(
                CompletableFuture.runAsync(someOperation, EXECUTOR_SERVICE)
                    .thenApply(v -> runQuery(v.getValues))
                    .thenAcceptAsync(res-> groupcount .put(v.key, res));
        }
CompletableFuture.allOf(completableFutures.toArray(new CompletableFuture[0])).get();