如何从2个不同的RxJava observable中获取2个值



我有2个可观察对象,将只返回1个东西。两者我都需要值来做其他事情。

如何同时订阅可观察对象和接收通知只有当两个值都可用时?

我试过这样做:

   final Observable<String> obs1 = Observable.just("A", "B");
   final Observable<String> obs2 = Observable.just("A", "B");
   Observable.zip(
       obs1,
       obs2,
       (a, b) -> {
         System.out.println("Processing " + a + b);
         return null;
       }
   );

但是什么都不会发生,除非我注册一个订阅者(这将是无用的)。

我使用的(丑陋的)解决方案是嵌入订阅,例如:
   final Observable<String> obs1 = Observable.just("A", "B");
   final Observable<String> obs2 = Observable.just("A", "B");
   obs1.subscribe(
     a -> {
       obs2.subscribe(
         b -> {
           System.out.println("Processing " + a + b);
         }
       );
     }
   );

这么普通的事情怎么做?

可观察对象是惰性的,所以你需要一个订阅者来完成这项工作。要组合来自两个可观察对象的项,需要使用zip运算符。对第一个解决方案做一个小修改:

final Observable<String> obs1 = Observable.just("A", "B");
   final Observable<String> obs2 = Observable.just("A", "B");
   Observable.zip(
       obs1,
       obs2,
       (a, b) -> {
         System.out.println("Processing " + a + b);
         return null;
       }
   ).subscribe();

相关内容

  • 没有找到相关文章

最新更新