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); 

원자로 대신에 그냥 RxJava 같은 영화를 만드는 그 밖에 Tuple5<> 또는 뭔가를 반환하려는 Flux<Tuple5<>>를 반환

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

. Tuple을 구독하고 싶지는 않지만 Spring Web Reactive에서 이것을 반환하려고합니다. 구독으로 일시적으로 해결했지만 RxJava와 동일한 작업을 수행 할 수 있는지 궁금합니다.

타임 스탬프 1:07:54의 this video의 예는 이전 버전에서 가능하다는 것을 보여줍니다.

모든 해결책이나 제안을 환영합니다!

답변

2

RxJava 솔루션은 Movie을 직접 반환하지 않지만 Single<Movie>을 반환합니다. Reactor의 zipTuple을 반환하지만 RxJava 서명은 Flux<Tuple5>과 비슷합니다.

그래서 원하는 것은 입니다. zip에는 Function<Object[], V>을 첫 번째 매개 변수로 사용하는 오버로드가 있습니다.이 옵션을 사용하면 압축 된 소스의 값을 결합 할 개체 V을 지정할 수 있습니다. 함수는 이러한 값의 배열을 입력으로 사용하고 결과 값인 Flux<V>에서 반환 할 값을 반환해야합니다 (이 경우 Movie).