如何将Flux<List<T>>打平转换为Flux<T>?
解决方案
你可以直接使用Reactor内置的flatMapIterable操作符实现Flux<List<T>>到Flux<T>的转换,这个操作符会自动将上游发射的每一个可迭代集合元素拆解为单个元素逐个向下游传递。
修改后的完整代码如下:
fun mapBatch(batch: List<String>): Mono<List<MyClass>> ... fun myFun(stream: Flux<String>): Flux<MyClass> { return stream .bufferTimeout(50, Duration.ofSeconds(60L)) .flatMap{ batch -> mapBatch(batch) } // 新增这一行即可完成类型转换 .flatMapIterable { it } }
补充说明
如果需要手动实现同样的效果,也可以使用flatMap配合Flux.fromIterable写法,功能完全等价:
.flatMap { list -> Flux.fromIterable(list) }
两种写法的运行效果没有差异,flatMapIterable是针对这种集合展开场景的语法糖,写法更简洁。
内容的提问来源于stack exchange,提问作者Clyde Barrow
相关产品推荐
相关产品推荐

