我正在将使用RxJava 1.x编写的小项目转换为Reactor 3.x。一切都很好,唯一的问题是我找不到如何替换flatMap(Observable::from)
的合适对应项。我有一个Mono<List<String>>
,需要将其转换为Flux<String>
。
我正在将使用RxJava 1.x编写的小项目转换为Reactor 3.x。一切都很好,唯一的问题是我找不到如何替换flatMap(Observable::from)
的合适对应项。我有一个Mono<List<String>>
,需要将其转换为Flux<String>
。
在 Reactor 3 中,from
操作符已经被专门化为几个变体,取决于原始来源(数组、可迭代对象等等)。
在您的情况下,请使用 yourMono.flatMapMany(Flux::fromIterable)
。
Mono.just(listOfElements).flatMapMany(Flux::fromIterable)
//这个不行
我必须写下面这样的代码Mono.just(listOfElements).flatMapMany{ Flux.fromIterable(it) }
- rhozetFlux::mergeSequential
静态工厂更适合这里: Iterable<Mono<String>> monos = ...
Flux<String> f = Flux.mergeSequential(monos);
List<Object> dbObjects = ListObjectsBD();
List<Dao> daos = mapperObjToDao(dbObjects);
Flux<Dao> daoFlux = Mono.just(daos).flatMapMany(Flux::fromIterable);
另一种方法是使用 flatMapIterable()
将此 Mono 发出的项转换为 Iterable,然后将其元素转发到返回的 Flux 中。
所以它看起来像这样:
List<String> strings = new ArrayList<>();
strings.add("hello");
strings.add("world");
strings.add("!");
Mono<List<String>> monoList = Mono.just(strings);
Flux<String> flux = monoList.flatMapIterable(list -> list);
或者用 Function.identity()
替换 lambda 表达式 list -> list
Flux<String> flux = monoList.flatMapIterable(Function.identity());