どのように私はモノを返す関数を含むときMono.zipWithを使用する必要がありますか?

AndyB:

私が持っているMono私は、相互に組み合わせたいということMonoのように、:

val firstMono = Mono.just("thing");
val secondMono = Mono.just("other thing");
val thirdMono = firstMono.zipWith(secondMono, function);

しかし、私は欲しいfunctionも返すためにMonoなくて Aで終わりますMono<Mono<?>>

私が思い付くことができる最高は以下のとおりです。

val thirdMono = firstMono.zipWith(secondMono, function)
                          .flatMap(identity());

それはハックのビットのように思えます。

また、私は考えます

val thirdMono = firstMono.zipWith(secondMono)
                         .flatMap(function);

しかし、その場合には、私が持っている必要がfunction受け入れるTuple2代わりに、醜悪で、個々の引数のを。

何かご意見は?

アレクサンダー銀行:

私はあなたのソリューションが十分に良いと思います。

あなたはそれがハックのように思えることと思われる場合は、別のユーティリティメソッドでそれを置くことができ、あなたがよりよい解決策を見つけたときにそれを変更します。何かのようなもの:

private static  <T1, T2, O> Function<Mono<T1>, Publisher<O>> flatZipTransformer(
        Mono<T2> p2, BiFunction<T1, T2, Mono<O>> function) {
    return p1 -> Mono.zip(p1, p2, function).flatMap(Function.identity());
}

今、あなたは次のようにそれを使用することができます:

firstMono.transform(flatZipTransformer(secondMono, function))

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=212340&siteId=1