以下 3 个方法返回
CompleteableFuture<JsonObject>
,我需要的内容在 JsonObject 的 value 属性上,所以最终我需要做一些类似 response.getJsonArray("value") 的事情
CompletableFuture<JsonObject> completeableFuture1 = entityService.getProducts();
CompletableFuture<JsonObject> completeableFuture2 = entityService.getCustomers();
CompletableFuture<JsonObject> completeableFuture3 = entityService.getOrders();
一旦我成功检索到这 3 个部分,我想继续使用依赖于它们的其余代码。我需要访问所有 3 个列表:产品、客户、订单。
在做了一些研究后,我认为我需要使用 allOf(),但是无法找出正确的语法来将它们拼凑在一起。
要将多个
CompletableFuture
实例合并为一个,可以使用CompletableFuture.allOf()
方法。此方法采用 CompletableFuture
实例的可变参数,并返回一个新的 CompletableFuture
,它在所有输入期货完成时完成,而不返回任何结果。
要访问输入期货的结果,您可以使用
CompletableFuture.join()
方法,该方法在未来完成时返回结果,或者如果未来异常完成则抛出异常。
这是一个示例,说明如何使用
CompletableFuture.allOf()
合并三个 CompletableFuture<JsonObject>
实例并提取 JsonArray
值:
CompletableFuture<JsonObject> productsFuture = entityService.getProducts();
CompletableFuture<JsonObject> customersFuture = entityService.getCustomers();
CompletableFuture<JsonObject> ordersFuture = entityService.getOrders();
CompletableFuture<Void> allFutures = CompletableFuture.allOf(productsFuture, customersFuture, ordersFuture);
CompletableFuture<List<JsonArray>> mergedFutures = allFutures.thenApply(
v -> Arrays.asList(
productsFuture.join().getJsonArray("value"),
customersFuture.join().getJsonArray("value"),
ordersFuture.join().getJsonArray("value")
)
);
// Continue with the remainder of your code that depends on the merged results
mergedFutures.thenAccept(results -> {
JsonArray products = results.get(0);
JsonArray customers = results.get(1);
JsonArray orders = results.get(2);
// Do something with the merged results
});
在这个例子中,我们首先从
CompletableFuture<JsonObject>
对象中获取三个 entityService
实例,我假设它是某种服务或 API 的实例,它返回 JSON 数据作为 CompletableFuture
实例。
然后我们使用
CompletableFuture.allOf()
将三个输入期货合并到一个新的CompletableFuture<Void>
实例中,称为allFutures
,当所有输入期货完成时完成。
接下来,我们使用
thenApply()
的allFutures
方法创建一个名为CompletableFuture<List<JsonArray>>
的新mergedFutures
实例。使用 JsonArray
方法从输入期货中提取的 join()
值列表完成了这个未来。
最后,我们使用
thenAccept()
的 mergedFutures
方法在合并结果可用时对它们执行一些操作。在这种情况下,我们从 JsonArray
中提取 List
值并将它们分配给局部变量,然后可以在代码的其余部分中使用。