我们如何将Mono <List <Type >>转换为Flux <Type>

Bas*_*uis 3 spring project-reactor reactive

使用弹簧5,使用反应器,我们有以下需要.

Mono<TheResponseObject> getItemById(String id){
    return webClient.uri('/foo').retrieve().bodyToMono(TheResponseObject)
}

Mono<List<String>> getItemIds(){
    return webClient.uri('/ids').retrieve().bodyToMono(List)
}

Mono<RichResonseObject> getRichResponse(){
    Mono<List> listOfIds = Mono.getItemIds()
    listOfIds.each({ String id ->
        ? << getItemById(id) //<<< how do we convert a list of ids in a Mono to a Flux
    })
    Mono<Object> someOtherMono = getOtherMono()
    return Mono.zip((? as Flux).collectAsList(), someOtherMono).map({
        Tuple2<List, Object> pair ->
        return new RichResonseObject(pair.getT1(), pair.getT2())
    }).cast(RichResonseObject)
}
Run Code Online (Sandbox Code Playgroud)

有什么方法可以将Mono <List <String >>转换为Flux <String>?

pvp*_*ran 7

这应该工作.鉴于Mono中的字符串列表

  Mono<List<String>> listOfIds;

  Flux<String> idFlux = listOfIds
    .flatMapMany(ids -> Flux.fromArray(ids.toArray(new String [0])));
Run Code Online (Sandbox Code Playgroud)

更好的是

listOfIds.flatMapMany(Flux::fromIterable)
Run Code Online (Sandbox Code Playgroud)

  • 您应该使用 `Flux.fromIterable()` 而不是创建两个新数组。 (2认同)