如何组合两个CompletableFuture自定义对象列表并返回通量对象



我是Reactive Java的新手,我收到了两个api请求,它们返回了两个CompletableFuture,其中包含两个自定义对象A的列表。我需要以某种方式将它们组合起来,序列化对象,创建另一个自定义对象B的新列表,其中一个字段具有序列化的A对象,并将其作为一个Flux对象返回。我一直在尝试这样做,但不起作用。

CompletableFuture<List<ResponseModels.A>> list1 = api.getListOfObjects();
CompletableFuture<List<ResponseModels.A>> list2 = api.getListOfOtherObjects();
CompletableFuture<ResponseModels.B> l = list1.thenApply(list1Objects -> list2.thenApply(list2Objects -> {
List<String> list1OfStrings = fop.stream().map(otcPaymentResultDTO -> JsonUtils.gsonFullBody.toJson(ResponseModels.B.builder()                                .payload(JsonUtils.gsonFullBody.toJson(list1Objects))
)).collect(Collectors.toList());
List<String> list2OfStrings = dvp.stream().map(otcDvPDTO -> JsonUtils.gsonFullBody.toJson(ResponseModels.B.builder()
.payload(JsonUtils.gsonFullBody.toJson(list2Objects)))).collect(Collectors.toList());
List<String> combinedList = Stream.concat(list1OfStrings.stream(), list2OfStrings.stream())
.collect(Collectors.toList());
return combinedList;
})));
return Flux.just(l);

您可以使用Mono.fromFutureCompletableFuture转换为Mono。以下代码将返回Flux<ResponseModels.B>:

Flux<ResponseModels.A> aFlux = Mono.fromFuture(() -> api.getListOfObjects())
.flatMapIterable(x -> x);
Flux<ResponseModels.A> bFlux = Mono.fromFuture(() -> api.getListOfOtherObjects())
.flatMapIterable(x -> x);

return Flux.merge(aFlux, bFlux)
.map(aModel -> /* json transformation logic here */);

最新更新