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

时间:2015-09-15 13:55:52

标签: java-8 rx-java

我有2个Observable只返回1个东西。我需要两个    做其他事情的价值观。

如何订阅两个Observable并收到通知    只有当两个值都可用时才会出现?

我尝试过类似的事情:

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

做这种常见事情的方法是什么?

1 个答案:

答案 0 :(得分:4)

Observables很懒,所以你需要一个订阅者来完成这项工作。要组合两个可观察对象中的项目,您需要使用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();