CompletableFuture allOf 之后参数问题?

发布于 2022-09-12 22:20:27 字数 1542 浏览 21 评论 0

CompletableFuture<String> n1PromQuery = CompletableFuture.supplyAsync(() -> {
    String storeArea = null;
 for (AllowQtyApply allowQtyApply : pageResult.getList()) {
        if(storeArea == null) {
            storeArea = allowQtyApply.getStoreArea();
 }
    }
    String n1Prom = null;
 ......
    return n1Prom;
});

CompletableFuture<List<String>> itemNosQuery = CompletableFuture.supplyAsync(() -> {
    List<String> itemNos = new ArrayList<>();
 for (AllowQtyApply allowQtyApply : pageResult.getList()) {
        itemNos.add(allowQtyApply.getItemNo().toString());
 }
    return itemNos;
});

CompletableFuture<Void> n1PromItemNos = CompletableFuture.allOf(n1PromQuery, itemNosQuery);
CompletableFuture<Map<String, Map<String,String>>> n1PromMapQuery  = n1PromItemNos.thenApplyAsync((n1Prom, itemNos) -> {
    Map<String, Map<String,String>> n1Map = new HashMap<>();
 List promNoList = new ArrayList();
 Map<String, String> n1PromMap = new HashMap<String, String>();
 Map<String, String> n1PromClassMap = new HashMap<String, String>();
 if (n1Prom != null && (List)itemNos.size() > 0) {
        promNoList.add(n1Prom);
 CSEResponse cseResponse = ProdCenterClient.getPromStoreProducts(storeNo, promNoList, itemNos);//
 ............................
});

新学CompletableFuture 不太理解, 我以为我allOf 组合了 前两个CompletableFuture之后的新的CompletableFuture可以直接使用前两个的返回值作为参数,但是实际这样做是报错的,如果我想组合后使用前两个的返回值作为参数应该怎么写 ??

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

妥活 2022-09-19 22:20:27

和js的Promise.all不同,java的allof后的新的CompletableFuture并无法获取前面的结果作为参数,但可以这样取值:

CompletableFuture.allOf(n1PromQuery, itemNosQuery).thenApplyAsync(() -> {
  //获取前两个的结果
  String n1Prom = n1PromQuery.join();//虽然用join,但执行到这一步之前必定已经执行完成了,所以这里是不会阻塞的
  List<String> itemNos = itemNosQuery.join();//同上
  .....
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文