1

私はこの小さなアプリケーションでProject Reactor 3.0を学ぼうとしていました。私はFlux.zip()関数を構成して、変数をMovieオブジェクトに結合するのに苦労しています。 Reactorでは戻り値の型がFlux<Tuple5<>>のようです。 RxJava2では、Function5<>を返します。Project Reactor composing Flux.zip()

RxJava2

Single<Movie> movie = Single.zip(getDesc(id), getCategory(id), getName(id), getRating(id), 
      (Function5<Integer, String, String, String, Double, Object>) (desc, cat, name, rating) -> 
        new Movie(id.blockingGet(), name, desc, cat, rating)).cast(Movie.class); 

Flux<Tuple5<Integer, String, String, String, Double>> tuple = 
      Flux.zip(id, getDesc(id), getCategory(id), getName(id), getRating(id)); 

の代わりに、私はちょうどRxJavaのようなムービーを作成するためにTuple5<>または何か他のものを返したいFlux<Tuple5<>>を返します。私はSpring Web Reactiveでこれを返そうとしているので、Tupleを購読したくありません。サブスクリプションで一時的に解決しましたが、RxJavaと同じことが可能かどうかは疑問でした。

タイムスタンプ1:07:54のthis videoの例では、古いバージョンでは可能でした。

すべての解決策や提案は大歓迎です!

答えて

2

RxJavaソリューションはMovieを直接返しませんが、Single<Movie>を返します。 ReactorにはTupleを返す簡略化されたzipがありますが、そのRxJava署名はFlux<Tuple5>に匹敵します。

だからあなたが欲しいのはFlux<Movie>です。 zipにはオーバーロードがあり、最初のパラメータとしてFunction<Object[], V>が使用されます。これにより、ジップソースの値を組み合わせるオブジェクトVを指定できます。関数はこれらの値の配列を入力として適用され、結果として得られるFlux<V>の値を返す必要があります。ケースの場合はMovieです。