【发布时间】: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