将所有元素组合成一个单声道流

8fsztsew  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(330)

这是我所面临问题的一个简化例子。

Flux<String> fluxString = Flux.just("A","B","C");
Mono<String> monoString = Mono.just("Original");

预期结果是这样的

Mono<String> expectedresult = "Original A B C";

方法1->我可以等待通量的所有元素被接收,然后将它们与单声道组合

方法2->将通量的每个元素组合到mono,并在接收到下一个通量元素之前用新值更新原始mono。以上哪种方法对我有效?
我用下面的代码尝试了方法2

Flux<String> fluxfrommono = monoString.flatMapMany(a-> Mono.just(a).repeat());
Flux.zip(fluxfrommono ,fluxString  ,(a,b)-> a+b)

但这会产生“original a”、“original b”、“original c”->原始字符串不会用每个flux元素的新值进行更新。
如何做到这一点?

w80xi6nr

w80xi6nr1#

你需要 concatWith 这个 monoStringfluxString ,和 reduce 它是一个 Mono<String> .

vqlkdk9b

vqlkdk9b2#

为我写的代码-

Flux<String> fluxString = Flux.just("A","B","C");
Mono<String> monoString = Mono.just("Original");
Mono<String> combinedString = fluxString.reduce((a,b)->a+b);
Mono<String> expectedresult = Mono.zip(monoString ,combinedString ,(a,b)->a+b);

相关问题