Rx java 可观察到的与自身的融合

Rx java 可观察到的与自身的融合,rx-java,Rx Java,我使用RxJava来计算事件发生后是否经过了x个时间量。我使用的逻辑基本上是将事件延迟x,将其与主事件流合并,并检查两个事件是否相同。两个事件完全相同的唯一情况是延迟事件是自原始事件以来发生的唯一事件 代码如下所示: sourceObservable .mergeWith( sourceObservable .filter(Event::isOneEvent) .delay(5, TimeUnit.SECONDS))

我使用RxJava来计算事件发生后是否经过了x个时间量。我使用的逻辑基本上是将事件延迟x,将其与主事件流合并,并检查两个事件是否相同。两个事件完全相同的唯一情况是延迟事件是自原始事件以来发生的唯一事件

代码如下所示:

sourceObservable
    .mergeWith(
        sourceObservable
            .filter(Event::isOneEvent)
            .delay(5, TimeUnit.SECONDS))
    )
    .scan(Event.OtherEvent(), (event1, event2) -> event1.equals(event2) ? Event.TimeOut() : event2)
    .filter(Event::isTimeoutEvent)

问题是,当订阅此流时,只有内部可观察对象获得事件。我想这是因为可见光是冷的。我已经用
PublishSubject
测试了同样的方法,它可以工作,但如果有更好的解决方案,我不想使用它。

您可能想使用
Observable.publish()
并创建一个可连接的Observable,它可以由多个订阅者共享。通过这种方式可以分发事件。为什么不使用
debounce
(或
throttleXXX
操作符之一)?如果在给定的时间窗口内,最后一个事件之后没有发生另一个事件,它将触发。如果没有发生其他事件,则会发出原始事件。如果您对事件之间的时间感兴趣,请使用
timeInterval()
@akarnokd我看了油门,一定是误解了它的工作原理。谢谢,我会用的。@ReutSharabani我会调查的。。。谢谢。好的。。。所以这些建议解决了我的大部分问题。谢谢大家。我有另一个问题,但这与此无关,所以我将作为一个单独的问题来问。