RxJava结合Observables

时间:2017-04-12 09:24:00

标签: java rx-java reactive-programming observable

我希望将多个observable的结果合并到父observable中。我无法立即访问所有可观察对象,他们将在整个程序执行期间订阅。

到目前为止,这是我的方法:

...
compoundObservable = compoundObservable.mergeWith(firstObservable);
...
compoundObservable = compoundObservable.mergeWith(secondObservable);
...

该方法无效,因为otherObservable发送的事件未由compoundObservable的订阅者注册。

如何组合这些可观察量?

2 个答案:

答案 0 :(得分:3)

使用Subject您可以随时订阅可观察对象,并且主题的所有订阅者都将获得所有项目。但是,在调试时这可能有点棘手。

PublishSubject<Object> subject = PublishSubject.create();
Observable<Object> observable1 = ...;
observable1.subscribe(subject);

subject.subscribe(...) // will eventually also get emisions from observable2

Observable<Object> observable2 = ...;
observable2.subscribe(subject);

答案 1 :(得分:0)

如果我理解你的问题,你有几个操作符来配对你的观察点:

现在你应该确定你的观察者产生数据的速率,以及你打算如何配对他们正在产生的数据。

例如:

  • CombineLatest - 拥有obs1和obs2,如果obs1以比obs2更快的速度生成数据,那么来自obs1的数据将与obs2生成的最新数据配对。因此,来自obs1的多个项目与来自obs2的相同项目配对。
  • Zip - 有obs1和obs2,如果obs1以比obs2更快的速度生成数据,则只有当obs2产生一个值时,来自obs1的数据才会配对。
  • 和/然后/当 - 用作组合两个以上可观察者的便利

注意:LINK还有一本免费的书(适用于.NET - RxNET)。检查组合序列中的配对序列部分,以获取更深入的说明和示例。语法类似,运算符的目的仍然是实现。