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

How to get 2 values from 2 differents RxJava Observables?

我有 2 个 Observable,它们 return 只有 1 个东西。我都需要 做其他事情的价值观。

如何订阅两个 Observables 并接收通知 仅当两个值都可用时?

我试过类似的方法:

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

这么普通的事情,有什么办法?

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