1

我一直在試圖用這個小應用程序學習Project Reactor 3.0。我正在努力編寫一個Flux.zip()函數來將變量組合到Movie對象中。在Reactor中,返回類型似乎是Flux<Tuple5<>>。在RxJava2中它返回一個Function5<>構建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)); 

而不是返回Flux<Tuple5<>>我想回到一個Tuple5<>或別的東西來建立電影就像RxJava的。我不想訂閱Tuple,因爲我試圖在Spring Web Reactive中返回這個。我暫時通過訂閱解決了它,但我想知道是否可以像RxJava一樣做。

時間戳1:07:54處的this video中的示例顯示它可能在舊版本中。

歡迎任何解決方案或建議!

回答

2

RxJava解決方案不會直接返回Movie,而是會返回Single<Movie>。 Reactor有一個簡化的zip,它返回Tuple,但是RxJava簽名與Flux<Tuple5>相當。

所以你想要的是一個Flux<Movie>zip有一個過載,它將Function<Object[], V>作爲第一個參數:它允許您指定要將來自壓縮源的值合併到哪個對象V中。該函數將以這些值的數組作爲輸入來應用,並且必須返回結果Flux<V>中發出的值,您的情況爲Movie