反应堆项目组成 Flux.zip()
Project Reactor composing Flux.zip()
我一直在尝试通过这个小应用程序学习 Project Reactor 3.0。我正在努力编写一个 Flux.zip() 函数来将变量组合到 Movie 对象。在 Reactor 中,return 类型似乎是 Flux<Tuple5<>>
。在 RxJava2 中它 return 是一个 Function5<>
.
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));
而不是 returning a Flux<Tuple5<>>
我想 return a Tuple5<>
或其他东西来像 RxJava 一样创建电影。我不想订阅元组,因为我试图在 Spring Web Reactive 中 return 这个。我通过订阅暂时解决了,但我想知道是否可以像RxJava一样做。
this video 中时间戳 1:07:54 中的示例表明它在旧版本中是可能的。
欢迎任何解决方案或建议!
RxJava 解决方案不是直接 return Movie
,而是 Single<Movie>
。 Reactor 有一个简化的 zip
即 return 是 Tuple
,但 RxJava 签名与 Flux<Tuple5>
.
相当
所以你想要的是 Flux<Movie>
。 zip
有一个将 Function<Object[], V>
作为第一个参数的重载:它允许您指定要将来自压缩源的值组合到哪个对象 V
中。该函数将应用这些值的数组作为输入,并且必须 return 要在结果 Flux<V>
中发出的值,在您的情况下是 Movie
.
可以,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));
我一直在尝试通过这个小应用程序学习 Project Reactor 3.0。我正在努力编写一个 Flux.zip() 函数来将变量组合到 Movie 对象。在 Reactor 中,return 类型似乎是 Flux<Tuple5<>>
。在 RxJava2 中它 return 是一个 Function5<>
.
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));
而不是 returning a Flux<Tuple5<>>
我想 return a Tuple5<>
或其他东西来像 RxJava 一样创建电影。我不想订阅元组,因为我试图在 Spring Web Reactive 中 return 这个。我通过订阅暂时解决了,但我想知道是否可以像RxJava一样做。
this video 中时间戳 1:07:54 中的示例表明它在旧版本中是可能的。
欢迎任何解决方案或建议!
RxJava 解决方案不是直接 return Movie
,而是 Single<Movie>
。 Reactor 有一个简化的 zip
即 return 是 Tuple
,但 RxJava 签名与 Flux<Tuple5>
.
所以你想要的是 Flux<Movie>
。 zip
有一个将 Function<Object[], V>
作为第一个参数的重载:它允许您指定要将来自压缩源的值组合到哪个对象 V
中。该函数将应用这些值的数组作为输入,并且必须 return 要在结果 Flux<V>
中发出的值,在您的情况下是 Movie
.
可以,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));