java 将List&lt;Mono &gt;转换< String>为Flux< String>

jm2pwxwz  于 2023-05-27  发布在  Java
关注(0)|答案(3)|浏览(239)

问题不多,但答案对某些代码非常具体。
一般来说,如何将Stream of Mono转换为Flux

List<Mono<String> listOfMono = stream()
.map( s -> { do something and return Mono<String> } )
.collect(Collectors.toList());

如何将listOfMono对象转换为Flux<String>

6rqinv9w

6rqinv9w1#

您可以使用fromIterable,然后使用flatMap来展平Mono
将这个Flux发出的元素异步转换为发布者,然后通过合并将这些内部发布者扁平化为单个Flux,这允许它们交叉。

Flux<String> result = Flux.fromIterable(listOfMono)
            .flatMap(Function.identity());
cygmwpex

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> } )

我个人更喜欢最后一个选项,因为这是最直接和最惯用的。

ercv8c1e

ercv8c1e3#

你也可以使用concat。

Flux.concat(listOfMono);

在concat中,总是保持秩序。

相关问题