Rx java ReactiveX使用'withLatestFrom'分隔并连接`

Rx java ReactiveX使用'withLatestFrom'分隔并连接`,rx-java,reactive-programming,Rx Java,Reactive Programming,我有一个事件序列,它们的类型是a或B,我从一个文本文件中读取这个序列 我用这个序列创建一个可观察的: A1-B-B-A2-B-B-B-B 并对其进行过滤,以便: Astream=stream.filter(trueIfA) b流=流.过滤器(trueIfB) 但是当我使用B.withlatest from(A,concat)时,我最终得到: A2B-A2B----A2B-A2B-A2B 为什么会这样?如何操作它,以便获得A1B-A1B-A2B-A2B-A2B-A2B序列?您应该使用Observ

我有一个事件序列,它们的类型是a或B,我从一个文本文件中读取这个序列

我用这个序列创建一个可观察的:

A1-B-B-A2-B-B-B-B

并对其进行过滤,以便:

Astream=stream.filter(trueIfA)

b流=流.过滤器(trueIfB)

但是当我使用
B.withlatest from(A,concat)
时,我最终得到:

A2B-A2B----A2B-A2B-A2B

为什么会这样?如何操作它,以便获得
A1B-A1B-A2B-A2B-A2B-A2B
序列?

您应该使用
Observable.combinelateTest()
,因为您希望在任何一个
Observable
发射项目时,从这两个
发射的最新发射量。

withLatestFrom()
运算符类似于
CombineTest
,但仅当单个源
可观察的
('B')发出项目时才会发出项目,而不是当传递给运算符的任何
可观察的
发出项目时,就像
CombineTest
发出项目一样。

除了yosriz'回答之外,您还需要
发布(Func1)
要多播原始源,请执行以下操作:

Observable<T> source = ...

source.publish(o -> 
    Observable.combineLatest(o.filter(trueIfA), o.filter(trueIfB), 
        (a, b) -> concat))
.subscribe(...)
可观测源=。。。
来源。发布(o->
可观测组合测试(o.filter(trueIfA)、o.filter(trueIfB),
(a,b)->concat)
.订阅(…)

尝试了这两种解决方案,但似乎没有任何效果,右侧的ever流似乎总是只包含最后一个元素。您的源代码到底是什么?他们的节奏合适吗?如果它们是同步的,那么实际上CombineTest将不适用于您。这是“同步”吗?我想我希望RXAPI能够处理静态数据以强制执行“顺序”和“时间”感,但我可能弄错了。您的图表表明存在时间组件,但对于数组,则没有时间组件。没有时间,你怎么知道A1和A2之间是什么?
Observable<T> source = ...

source.publish(o -> 
    Observable.combineLatest(o.filter(trueIfA), o.filter(trueIfB), 
        (a, b) -> concat))
.subscribe(...)