2017-04-12 148 views
1

我想将多个观测值的结果合并为一个父观察值。我无法一次访问所有的观察对象,他们将在整个程序的执行过程中被订阅。RxJava结合观察值

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

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

的做法没有奏效,由otherObservable发送的事件不是由compoundObservable的用户注册。

我该如何结合这些可观察性?

+0

在你的情况下会使用'Subject'作为选项吗? – Lamorak

+0

那么'firstObservable'和'secondObservable'只有在某人订阅(那时是什么)'compoundOversable'后才会创建? –

+0

'firstObservable'和'secondObservable'已经被创建。我期待在'compoundObservable'中累积每个observable的结果。至于'主题'我打开它 - 发表一个答案! – bkach

回答

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

如果我理解正确你的问题,你有几个运营商配对观测:

现在,你应该确定在哪个评估你的观察结果产生的数据,以及如何做您计划将它们生成的数据进行配对。

例如:

  • CombineLatest - 具有OBS1和OBS2,如果OBS1以比OBS2更快的速率再从OBS1的数据将与由OBS2制作的最新数据进行配对产生的数据。因此,obs1中的多个项目与obs2中的相同项目配对。
  • Zip - 具有obs1和obs2,如果obs1以比obs2更快的速率生成数据,则仅当obs2将生成值时,obs1中的数据才会配对。
  • 和/然后/时 - 被用作方便相结合两个以上的观测

注:也有一个免费的书(用于.NET - RxNET)在此LINK。检查配对序列部分组合序列的深入解释和样品。语法类似,操作符在实现中保持不变。