我有一系列事件,它们是A或B的类型,我从文本文件中读出这个序列。
我用这个序列创建一个observable:
A1-B-B-A2-B-B-B
并过滤它们:
Astream = stream.filter(trueIfA)
Bstream = stream.filter(trueIfB)
A: A1-----A2------
B: --B-B-----B-B-B
但是当我使用B.withLatestFrom(A,concat)
时,我最终得到:
A2B-A2B----A2B-A2B-A2B
为什么会这样?我如何操纵它以便我可以获得A1B-A1B-A2B-A2B-A2B
序列?
答案 0 :(得分:1)
您应该使用Observable.combineLatest()
,因为您希望在其中任何一个发出物品时获得Observable
的最新排放。
withLatestFrom()
运算符类似于combineLatest
,但仅在单个来源Observable
(' B')发出项目时发出项目,而不是{{1}如Observable
所做的那样传递给运算符的s。
source
答案 1 :(得分:1)
超越yosriz'回答,您还需要publish(Func1)
来组播原始来源:
Observable<T> source = ...
source.publish(o ->
Observable.combineLatest(o.filter(trueIfA), o.filter(trueIfB),
(a, b) -> concat))
.subscribe(...)