自上次事件以来,RxJava忽略X时间的事件?

时间:2017-05-23 01:34:14

标签: java android rx-java reactivex

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

我目前有这个:

    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。相反,我想看看是否有办法组成可以做同样事情的观察者。

1 个答案:

答案 0 :(得分:5)

好像你的愿望行为恰好是throttleFirst()运营商:

enter image description here

它将在每个时间窗口仅发出第一个项目。