0

I have the following method:

 public Uni<JsonObject> getHMOStats(String outcode);

That returns a Uni, which value needs to be set in the OutcodeStats objects created by this method:

 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

    }

Unfortunately, I have no idea how to combine the two in order to set the hmoStats attribute of the OutcodeStats object.

One solution could be to make getHMOStats not returning a Uni, but I do not think that is the way to go.

Thanks for your attention.

1 Answers1

1

I think you want to do

                .onItem()
                .transformToUniAndMerge(outcodeStats ->
                        hmoService.getHMOStats(outcodeStats.getOutcode())
                                .onItem()
                                    .transform(hmoStats -> {
                                        outcodeStats.setHmoStats(hmoStats);
                                        return outcodeStats;
                                    }
                                ));
Jan Martiška
  • 1,151
  • 5
  • 7