【问题标题】:Debounce only false values in boolean observable仅在布尔可观察值中反跳假值
【发布时间】:2015-10-06 20:09:12
【问题描述】:

我有一个 boolean observable(通过观察者)启动和停止 Android 服务。当 true 被传递时,服务必须立即启动。当 false 被传递时,我想对其进行去抖动,以防很快出现 true,以避免不必要的(和破坏性的)停止和启动服务。是否有可以做到这一点的标准运算符的组合,或者我必须自己编写,如果是这样,我应该基于OperatorDebounceWithTime.java 还是有更简单的方法?谢谢!

【问题讨论】:

标签: rx-java


【解决方案1】:

您似乎想要debounce(Func1) 的版本,它可以让您为每个发射的项目定义一个自定义去抖动窗口。它接受一个函数,该函数为源 Observable 发出的每个项目返回一个 Observable。如果源 Observable 在这个新生成的 Observable 终止之前发出另一个项目,则 debounce 将抑制该项目。

例如,以下代码将立即发出 true 值,并在发出之前将 false 值保持 2 秒。如果源在计时器到期之前发出另一个true 值,则false 将被抑制。

deviceTrigger
   .distinctUntilChanged()
   .debounce(startDevice -> startDevice 
               ? Observable.empty() 
               : Observable.timer(2, TimeUnit.SECONDS))
   .distinctUntilChanged();

请注意,distinctUntilChanged() 调用可能不是必需的,具体取决于您的源 Observable 是否已经不同并且您的消费者是否连续处理多个 true 值。

【讨论】:

  • 太棒了!我知道debounce() 的变体,但没有意识到该函数接受每个项目并且可以根据每个项目做出决定。
猜你喜欢
  • 1970-01-01
  • 2011-12-10
  • 1970-01-01
  • 2019-02-04
  • 1970-01-01
  • 1970-01-01
  • 2021-05-08
  • 2020-04-02
  • 2013-09-11
相关资源
最近更新 更多