如何将Mono <List <String >>转换为Flux <String>

Mav*_*avo 18 java project-reactor

我正在将用RxJava 1.x编写的小项目转换为Reactor 3.x. 一切都很好,除了我无法找到如何替换flatMap(Observable::from)适当的对应物.我有Mono<List<String>>,我需要将其转换为Flux<String>.

谢谢

Sim*_*slé 36

在Reactor 3中,from运算符已经专门用于一些变体,具体取决于原始源(数组,可迭代等).

yourMono.flatMapMany(Flux::fromIterable)在你的情况下使用.

  • 方法的返回值[Mono.flatMap](https://github.com/reactor/reactor-core/blob/v3.1.5.RELEASE/reactor-core/src/main/java/reactor/core/publisher/Mono .java#L2071)是Mono,而不是Flux. (2认同)

Mic*_*kis 8

我认为Flux::mergeSequential静态工厂可能更适合这里:

 Iterable<Mono<String>> monos = ...
 Flux<String> f = Flux.mergeSequential(monos);
Run Code Online (Sandbox Code Playgroud)

这种合并(顺序)将保持给定源可迭代内部的排序,并且还会从所有参与的源急切地订阅/请求(因此在计算单声道结果​​时需要更多的并行化)。