1

Ich habe versucht, Project Reactor 3.0 mit dieser kleinen Anwendung zu lernen. Ich habe Probleme, eine Flux.zip() - Funktion zum Kombinieren von Variablen mit einem Movie-Objekt zu erstellen. In Reactor scheint der Rückgabetyp ein Flux<Tuple5<>> zu sein. In RxJava2 gibt es eine Function5<> zurück.Project Reactor Komponieren 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); 

Reactor

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

Statt eine Flux<Tuple5<>> der Rückkehr ich sonst ein Tuple5<> oder etwas zurückgeben möchten den Film wie RxJava zu erstellen. Ich möchte das Tuple nicht abonnieren, da ich versuche, das im Frühjahr Web Reactive zurückzugeben. Ich habe es vorübergehend gelöst, indem ich mich angemeldet habe, aber ich habe mich gefragt, ob es möglich ist, das gleiche wie RxJava zu machen.

Das Beispiel in this video auf Zeitstempel 1:07:54 zeigt, dass es in einer alten Version möglich war.

Alle Lösungen oder Vorschläge sind willkommen!

Antwort

2

Die RxJava-Lösung liefert nicht direkt die Movie, sondern eine Single<Movie>. Reaktor hat eine vereinfachte zip, die eine Tuple zurückgibt, aber diese RxJava-Signatur ist vergleichbar mit Flux<Tuple5>.

Was Sie wollen, ist ein . zip hat eine Überlastung, die einen Function<Object[], V> als den ersten Parameter verwendet: mit dem Sie angeben können, in welches Objekt V die Werte aus den gezippten Quellen kombiniert werden sollen. Die Funktion wird mit einem Array dieser Werte als Eingabe angewendet und muss den Wert ausgeben, der in dem resultierenden Flux<V> ausgegeben werden soll, in Ihrem Fall ein Movie.