首页 > 解决方案 > 将多个通量合二为一

问题描述

我想在我的 Spring Boot 服务中将多个 Flux 结果收集到一个中。我的方法:

    private Flux<VMachineResourceResponse> getDataForPhysicalMachineProtection(
          ResourcesWrapper resources, UUID groupId) {
    
        Flux<VMachineResourceResponse> result = Flux.empty();
        resources
            .getHypervResources()
            .forEach(
                resource -> {
                  Flux<VMachineResourceResponse> protectedResourcesForAgentAndId =
                      hypervAgentService.getProtectedResourcesForAgentAndId(
                          groupId, resource.getAgentId());
                  result.mergeWith(protectedResourcesForAgentAndId); //maybe that way???
                });
return result;
      }

怎么做?

标签: javaspring-bootreactive-programmingspring-webflux

解决方案


你应该把你的列表粘贴到一个Flux中,然后flatMap在它上面获取每个新的Flux. 将flatMap自动将所有内容“压平”为一个Flux

以下示例应显示该概念:

public Flux<String> getData() {

    final List<String> strings = new ArrayList<>();
    strings.add("Foo");
    strings.add("Bar");

    return Flux.fromIterable(strings)
            .flatMap(this::get);
}

private Flux<String> get(String s) {
    return Flux.just(s + "Bar", s + "Foo");
}

推荐阅读