RxJava合并去抖动而不是去抖动可观察者

wil*_*dev 8 java rx-java reactivex

我有两个可观察量:

Observable O(open):在textview中打开一些内容的文件

可观察的E(编辑):在textview中编辑的文件内容

我想去掉E observable,并将它与O observable合并.

obs = Observable.merge(E.debounce(2000, TimeUnit.MILLISECONDS) , O)
                .subscribe(content->System.out.println("new content: " + content))
Run Code Online (Sandbox Code Playgroud)

问题是如果E发出事件E1并且在O发出O1事件之后,我们有输出:

new content: O1
new content: E1 // this output is rebundant (cuz we already have newer content O1)
Run Code Online (Sandbox Code Playgroud)

这是一个正在发生的事情的图表:图

如何从去抖动的观察中摆脱这个过度的旧事件?

小智 2

你可以试试

Observable.merge(O, O.switchMap(o -> E.debounce()))
          .subscribe()
Run Code Online (Sandbox Code Playgroud)

switchMap 的行为与flatMap非常相似,不同之处在于,每当源 Observable 发出新项时,它都会取消订阅并停止镜像从先前发出的项生成的 Observable,并开始仅镜像当前项。