首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何压缩超过8种不同类型的mono

如何压缩超过8种不同类型的mono
EN

Stack Overflow用户
提问于 2022-05-26 04:59:41
回答 1查看 725关注 0票数 0

我正在尝试同时发出9个api调用。所有这些调用都会返回不同的响应对象。在此之前,我们有8个api调用,由于这些mono是不同的类型,所以我使用了Mono.zip,如下所示。

代码语言:javascript
复制
Mono<ResponseEntity<Service1Response>> monoService1 = callService1();
Mono<ResponseEntity<Service2Response>> monoService2 = callService2();
...
Mono<ResponseEntity<Service3Response>> monoService7 = callService7();
Mono<ResponseEntity<Service4Response>> monoService8 = callService8();

MixResponse mix = Mono.zip(monoService1, monoService2, monoService3, monoService4, monoService5, monoService6, monoService7, monoService8).flatMap(response -> {
  MixResponse mixResp = new MixResponse();
  mixResp.setResponse1(response.getT1().getBody());
  mixResp.setResponse2(response.getT2().getBody());
  mixResp.setResponse3(response.getT3().getBody());
  mixResp.setResponse4(response.getT4().getBody());
  mixResp.setResponse5(response.getT5().getBody());
  mixResp.setResponse6(response.getT6().getBody());
  mixResp.setResponse7(response.getT7().getBody());
  mixResp.setResponse8(response.getT8().getBody());
  return Mono.just(mixResp);
})).block();

但是现在我们又有了一个服务,Mono.zip只支持最多8个monos。除了Mono.zip之外,我还可以在我的情况下使用它吗?如果这个问题看起来很蠢的话,很抱歉。我是春天的新人。提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-26 05:50:41

您可以使用以Mono.zip作为参数和组合器函数的Iterable来组合结果并转换为特定类型:

<R> Mono<R> zip(final Iterable<? extends Mono<?>> monos, Function<? super Object[], ? extends R> combinator)

代码语言:javascript
复制
List<Mono<? extends ResponseEntity<?>>> requests = List.of(
        monoService1, 
        monoService2, 
        monoService3, 
        monoService4
);

Mono.zip(requests, responses -> {
    MixResponse mixResp = new MixResponse();
    mixResp.setResponse1(((ResponseEntity<Service1Response>) responses[0]).getBody());
    mixResp.setResponse2(((ResponseEntity<Service2Response>) responses[1]).getBody());
    mixResp.setResponse3(((ResponseEntity<Service3Response>) responses[2]).getBody());
    mixResp.setResponse4(((ResponseEntity<Service4Response>) responses[3]).getBody());
    return mixResp;
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72386882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档