我有一个布尔可观察值(通过观察者)启动和停止Android服务。当传递true时,服务必须立即启动。当错误通过时,如果不久之后出现真实情况,我想撤消它,以避免不必要的(和破坏性的)停止和启动服务。是否有标准操作员的组合可以做到这一点,或者我必须写我自己的,如果是的话,我应该基于OperatorDebounceWithTime.java
还是有一个更简单的方法?谢谢!在布尔可观察值中仅去除假值
0
A
回答
4
它看起来像你想要的版本debounce(Func1),让你为每个项目发射定义一个自定义的去抖动窗口。它需要一个函数为源Observable发出的每个项目返回一个Observable。如果源Observable在这个新生成的Observable终止之前发射另一个项目,则去抖动将抑制该项目。
例如,以下代码将立即发出true
值,并在发射它们之前持续保持false
值2秒。如果源在定时器到期之前发出另一个true
值,则将禁止false
。
deviceTrigger
.distinctUntilChanged()
.debounce(startDevice -> startDevice
? Observable.empty()
: Observable.timer(2, TimeUnit.SECONDS))
.distinctUntilChanged();
注意,取决于如果源可观察已经是不同的,你的消费在连续处理多个true
值distinctUntilChanged()
电话可能没有必要。
+0
辉煌!我知道debounce()这个变种,但是并没有意识到这个函数占用了每个元素,并且可以根据每个元素来决定。 –
相关问题
- 1. 观察在布尔阵列
- 2. 如何检查可观察为空或返回布尔值
- 3. 我可以将布尔值或基元转换为可观察值吗?
- 4. 敲除:更改可观察值
- 5. Angular - 修改可观察值
- 6. 订阅可观察值
- 7. RxJava - 两个可观察人士透露,仅在特定的值
- 8. knockoutjs - 可观察到的可观察值的对象的observableArray
- 9. 从值表中为观察值赋值
- 10. 自动键 - 值观察可可
- 11. TableView的观察值
- 12. 在“beforeChange”订阅中获取可观察值的新值
- 13. 敲除 - 在特定范围内保持可观察值
- 14. 将观察值设置为R中该观察值的最小值
- 15. 如何在原始观察值平坦化为新的观察值之后再听原始观察值?
- 16. 除去观察者的dealloc与
- 17. Rx:使用不同类型的观察值创建后续可观察值(链接观察者)
- 18. 基于RxJava 2.X中的布尔门暂停和恢复观察值?
- 19. 可观察给出了多个值
- 20. 从setTimeout(Rxjs)返回可观察值
- 21. 可观察数组值更新
- 22. 拒绝可观察值变化
- 23. 如何将来自一个可观察值的值映射到具有可观察值的对上?
- 24. 敲除可观察行为
- 25. 在可可触摸中观察的关键值
- 26. 在将值添加到可观察值前等待x秒
- 27. 如何在变化时获得可观察值的值?
- 28. 从post方法中获得返回值,带有可观察值
- 29. 当另一个可观察事件发生时从一个可观察值中检索值
- 30. JavaFX可观察值可以交换的值
你可以在debouncer之前应用'distinctUntilChanged'。 – akarnokd
我认为我对这个问题的答案适用于这里:http://stackoverflow.com/questions/30676731/timer-rxjava-control-system-function/30693365#30693365 –