问题不多,但答案对某些代码非常具体。一般来说,如何将Stream of Mono转换为Flux
List<Mono<String> listOfMono = stream() .map( s -> { do something and return Mono<String> } ) .collect(Collectors.toList());
如何将listOfMono对象转换为Flux<String>
listOfMono
Flux<String>
6rqinv9w1#
您可以使用fromIterable,然后使用flatMap来展平Mono将这个Flux发出的元素异步转换为发布者,然后通过合并将这些内部发布者扁平化为单个Flux,这允许它们交叉。
Mono
Flux<String> result = Flux.fromIterable(listOfMono) .flatMap(Function.identity());
cygmwpex2#
如果你的输入是一个Monos列表,你可以简单地做:
Flux.merge(listOfMono);
如果你的输入是流,你可以
stream() .map( s -> { do something and return Mono<String> } ) .collect(Collectors.collectingAndThen(Collectors.toList(), Flux::merge));
或
Flux.fromStream(stream()) .flatMap( s -> { do something and return Mono<String> } )
我个人更喜欢最后一个选项,因为这是最直接和最惯用的。
ercv8c1e3#
你也可以使用concat。
Flux.concat(listOfMono);
在concat中,总是保持秩序。
3条答案
按热度按时间6rqinv9w1#
您可以使用fromIterable,然后使用flatMap来展平
Mono
将这个Flux发出的元素异步转换为发布者,然后通过合并将这些内部发布者扁平化为单个Flux,这允许它们交叉。
cygmwpex2#
如果你的输入是一个Monos列表,你可以简单地做:
如果你的输入是流,你可以
或
我个人更喜欢最后一个选项,因为这是最直接和最惯用的。
ercv8c1e3#
你也可以使用concat。
在concat中,总是保持秩序。