ReactiveX与`withLatestFrom`分开并加入

时间:2017-03-19 03:25:34

标签: rx-java reactive-programming

我有一系列事件,它们是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序列?

2 个答案:

答案 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(...)