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

标签 java android rx-java reactivex

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

我目前有这个:

    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。相反,我想看看是否有一种方法可以编写可执行相同操作的可观察对象。

最佳答案

似乎您的期望行为正是 throttleFirst() 运算符:

enter image description here

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

关于java - RxJava 自上次事件以来忽略 X 时间的事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44124425/

相关文章:

java - Spring URI 模式。在正则表达式路径中使用斜杠

android - 在 Android 中通过 JNI 使用 libxml2

java - 使用 JDK 7 u7 和 netbeans 7.2 解析日期会产生不需要的结果

java - ArrayList 大小在循环外为零

android - 有没有办法控制 Android Wear 表盘上交互模式的持续时间?

android - 两个或多个组件作为一个 "big"组件

java - 在 ConnectableObservable 中执行异步查询的线程问题

android - 有什么方法可以在可观察对象发出任何项目之前执行代码? (用于重试目的)

java - 如何使用 rxJava 发出多重请求

java - 连接两个java项目