【发布时间】:2017-06-19 20:33:17
【问题描述】:
我正在将用 RxJava 1.x 编写的小项目转换为 Reactor 3.x。一切都很好,除了我找不到如何用合适的对应物替换flatMap(Observable::from)。我有Mono<List<String>>,我需要将其转换为Flux<String>。
【问题讨论】:
标签: java project-reactor
我正在将用 RxJava 1.x 编写的小项目转换为 Reactor 3.x。一切都很好,除了我找不到如何用合适的对应物替换flatMap(Observable::from)。我有Mono<List<String>>,我需要将其转换为Flux<String>。
【问题讨论】:
标签: java project-reactor
在 Reactor 3 中,from 运算符已被专门化为几个变体,具体取决于原始源(数组、可迭代等...)。
在你的情况下使用yourMono.flatMapMany(Flux::fromIterable)。
【讨论】:
Mono.just(listOfElements).flatMapMany{ Flux.fromIterable(it) } `
谢谢西蒙,我实现了这样的东西:
List<Object> dbObjects = ListObjectsBD();
List<Dao> daos = mapperObjToDao(dbObjects);
Flux<Dao> daoFlux = Mono.just(daos).flatMapMany(Flux::fromIterable);
【讨论】:
我认为Flux::mergeSequential 静态工厂可能更适合这里:
Iterable<Mono<String>> monos = ...
Flux<String> f = Flux.mergeSequential(monos);
这种合并(顺序)将保持给定源可迭代内部的顺序,并且还将从所有参与的源急切地订阅/请求(因此在计算单声道结果时预计会有更多的并行化)。
【讨论】:
Flux.mergeSequential 按顺序订阅每个源,而无需等待其间完成。如果您严格要求下一个 Mono 在前一个完成后发生(例如,您要发布到事件队列和订单问题),您应该使用 Flux.concat(monos)。