如何将 Mono<Map<String, Optional<String>>> 转换为 Flux<Tuple<String, Optional<String>>>

How to convert a Mono<Map<String, Optional<String>>> to a Flux<Tuple<String, Optional<String>>>

我将 WebFlux 与 Reactor 一起使用,并创建了一个休息服务,该服务使用 WebFlux webclient 聚合和转换来自内部服务调用的结果。

客户端returns一个Mono<Map<String, Optional<String>>> 我想在带有键值元素的 Flux 中反汇编,以便以后可以组合它。

我正在考虑转换

类型的客户端响应

Mono<Map<String, Optional<String>>>

Flux<Tuple<String, String>>

我知道您可以使用 responseMono.flatMapMany(Flux::fromIterable)

Mono<List<String>> 转换为 Flux<String>

但我找不到处理地图的方法。

您可以使用 mono.flatMapMany(map -> Flux.fromIterable(map.entrySet())),这会给您一个 Flux<Entry<String, Optional<String>>>

如果您明确希望它是 Tuple,而不是 Entry,那么只需执行:

mono.flatMapMany(map -> Flux.fromIterable(map.entrySet()))
        .map(e -> Tuples.of(e.getKey(), e.getValue()));