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;
}
));
我有以下方法:
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;
}
));