Mutiny:如何结合 Uni 和 Multi?

Mutinity: how to combine a Uni and a Multi?

我有以下方法:

 public Uni<JsonObject> getHMOStats(String outcode);

即returns一个Uni,需要在该方法创建的OutcodeStats对象中设置其值:

 private Multi<OutcodeStats> getOutcodeStats() {
        return Multi.createFrom().items(UkRegions.values())
                .invoke(region -> log.infof("Fetching stats for region %s", region.name()))
                .flatMap(region -> outcodeStatsService.getByRegion(apiKey, region.name()).toMulti())
                .flatMap(regionStats -> Multi.createFrom().items(regionStats.getData().stream()))
                .invoke(outcodeStats -> log.infof("Processing %s", outcodeStats.getOutcode()))
                .map(this::setEffectiveDate)
                .map(outcodeStats -> outcodeStats.setHmoStats(hmoService.getHMOStats(outcodeStats.getOutcode()))))  <--- PSEUDO CODE

    }

不幸的是,我不知道如何将两者结合起来以设置 OutcodeStats 对象的 hmoStats 属性。

一个解决方案可能是 getHMOStats 不返回 Uni,但我不认为这是可行的方法。

感谢您的关注。

我觉得你想做

                .onItem()
                .transformToUniAndMerge(outcodeStats ->
                        hmoService.getHMOStats(outcodeStats.getOutcode())
                                .onItem()
                                    .transform(hmoStats -> {
                                        outcodeStats.setHmoStats(hmoStats);
                                        return outcodeStats;
                                    }
                                ));