Java Project.Flux.zip()

Java Project.Flux.zip(),java,reactive-programming,rx-java2,project-reactor,spring-webflux,Java,Reactive Programming,Rx Java2,Project Reactor,Spring Webflux,我一直在尝试使用这个小应用程序学习ProjectReactor 3.0。我正在努力编写一个Flux.zip()函数,用于将变量组合到电影对象。在反应堆中,回流类型似乎是一种通量。在RxJava2中,它返回一个函数5 RxJava2 Single<Movie> movie = Single.zip(getDesc(id), getCategory(id), getName(id), getRating(id), (Function5<Integer, St

我一直在尝试使用这个小应用程序学习ProjectReactor 3.0。我正在努力编写一个Flux.zip()函数,用于将变量组合到电影对象。在反应堆中,回流类型似乎是一种
通量
。在RxJava2中,它返回一个
函数5

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);
Single movie=Single.zip(getDesc(id)、getCategory(id)、getName(id)、getRating(id),
(功能5)(描述、类别、名称、等级)->
新电影(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元组=
zip(id、getDesc(id)、getCategory(id)、getName(id)、getRating(id));
我不想返回一个
Flux
,而是想返回一个
Tuple5
或其他类似于RxJava的东西来创建电影。我不想订阅元组,因为我试图在SpringWeb中返回它。我通过订阅暂时解决了这个问题,但我想知道是否可以像RxJava那样做

时间戳1:07:54中的示例显示,在旧版本中这是可能的


欢迎提出任何解决方案或建议

RxJava解决方案不直接返回
电影
,而是一个
单曲
。Reactor有一个简化的
zip
,它返回一个
Tuple
,但是RxJava签名与
Flux
相当


因此,您需要的是一个
Flux
zip
有一个重载,它将
函数
作为第一个参数:用于指定压缩源的值要组合到哪个对象
V
。该函数将应用这些值的数组作为输入,并且必须返回在生成的
通量中发出的值,在您的情况下,可以使用
电影
Zip
。它等待源发出一个元素并将它们组合成元组。如下图所示,出版商发布了名、姓和部门信息,这三者结合在一起形成了用户流量

Flux<String> fnameFlux = Flux.just("Ramesh","Amit","Vijay");
Flux<String> lnameFlux = Flux.just("Sharma","Kumar","Lamba");
Flux<String> deptFlux = Flux.just("Admin","IT","Acc.");

Flux<User> userFlux = Flux.zip(fnameFlux, lnameFlux, deptFlux)
                          .flatMap(dFlux -> 
                                   Flux.just(new User(dFlux.getT1(), dFlux.getT2(), dFlux.getT2())));

userFlux.subscribe(x -> System.out.println(x));
Flux fnameFlux=Flux.just(“Ramesh”、“Amit”、“Vijay”);
通量lnameFlux=Flux.just(“Sharma”、“Kumar”、“Lamba”);
通量deptFlux=Flux.just(“管理”、“IT”、“附件”);
通量userFlux=Flux.zip(fnamefux、lnamefux、deptFlux)
.flatMap(dFlux->
Flux.just(新用户(dFlux.getT1(),dFlux.getT2(),dFlux.getT2());
订阅(x->System.out.println(x));