[英]How to convert List<Mono<String>> into Flux<List<String>>?
[英]How to convert Mono<List<String>> into Flux<String>
我正在将用 RxJava 1.x 编写的小项目转换为 Reactor 3.x。 一切都很好,只是我找不到如何用合适的对应物替换flatMap(Observable::from)
。 我有Mono<List<String>>
并且我需要将它转换为Flux<String>
。
在 Reactor 3 中, from
运算符已专门化为几个变体,具体取决于原始来源(数组、可迭代等)。
在您的情况下使用yourMono.flatMapMany(Flux::fromIterable)
。
我认为Flux::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);
我正在将用 RxJava 1.x 编写的小项目转换为 Reactor 3.x。 一切都很好,只是我不知道如何用合适的对应物替换flatMap(Observable::from)
。 我有Mono<List<String>>
,我需要将它转换为Flux<String>
。
另一种方法是使用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);
或者将 lambda list -> list
替换为Function.identity()
Flux<String> flux = monoList.flatMapIterable(Function.identity());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.