Webflux Reactor如何将Stream.map输出的Mono与Flux合并为Flux
解决Reactor中混合Mono与Flux合并为单一Flux的问题
核心思路是先把所有返回结果统一为Flux类型,再将多个Flux合并成一个。因为Mono本身提供了转Flux的方法,同时Flux有现成的合并工具方法。
具体实现步骤:
- 在
map操作中,将Mono类型的结果通过flux()方法转为Flux,确保每个A实例都映射为Flux<Source> - 将Stream转换为Flux集合,再用
Flux.concat()或Flux.merge()合并所有Flux
完整代码示例:
class A { String x; String y; boolean isOwner(); } Flux<Source> foo(List<A> aList) { return Flux.concat( aList.stream() .map(a -> { if (a.isOwner()) { // 生成对应的Flux<Source> Flux<Source> ownedSource = ...; return ownedSource; } else { // 生成对应的Mono<Source>并转为Flux Mono<Source> givenSource = ...; return givenSource.flux(); } }) .collect(Collectors.toList()) ); }
合并方式说明:
- Flux.concat():按原列表顺序依次处理每个Flux,前一个Flux完全处理完才会开始下一个,最终结果顺序与原列表一致
- Flux.merge():并行处理所有Flux,结果顺序取决于各源的响应速度,适合不关心顺序的场景
内容的提问来源于stack exchange,提问作者Tiina
相关产品推荐
相关产品推荐

