【问题标题】:RxJava ignore events for X time since last event?自上次事件以来,RxJava 忽略 X 时间的事件?
【发布时间】:2017-05-23 01:34:14
【问题描述】:

我想知道是否有一种干净的方法来实现可观察到的可过滤掉在最近发出的事件之后的时间窗口内发生的任何事件?

我目前有这个:

    source.timeInterval(TimeUnit.MILLISECONDS)
            .filter(new Predicate<Timed<Object>>() {
                final long TIME_LIMIT = 10 * 1000;
                long totalTime = 0;

                @Override
                public boolean test(@NonNull Timed<Object> objectTimed) throws Exception {
                    totalTime += objectTimed.time();

                    if (totalTime > TIME_LIMIT) {
                        totalTime = 0;
                        return true;
                    }
                    return false;
                }
            })
            .subscribe(objectTimed -> {
                doSomething(objectTimed)
            });

从技术上讲,这可以解决问题,但需要在过滤器中添加一些额外的状态,这有点难看,并且阻止了我使用 lambda。相反,我想看看是否有一种方法可以组合 observables 来做同样的事情。

【问题讨论】:

  • 我认为你需要延迟 observable 或 Observable.combineLatest
  • 延迟是不合适的,因为在忽略窗口期间到达的事件应该被完全过滤掉。延迟只会改变事件到达的时间,这在这里是不希望的。您必须详细说明 combineLatest。

标签: java android rx-java reactivex


【解决方案1】:

看起来你的愿望行为正是throttleFirst()运营商:

它只会在每个时间窗口发出第一项。

【讨论】:

  • 我同意,throttleWithTimeout( ) 或 debounce( ) 运算符。
猜你喜欢
  • 2014-12-20
  • 1970-01-01
  • 2018-10-13
  • 1970-01-01
  • 2015-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多