RxJava 自上次事件以来忽略 X 时间的事件?
RxJava ignore events for X time since last event?
我想知道是否有一种干净的方法来实现可观察对象,它可以过滤掉在最近发出的事件之后 window 时间内发生的任何事件?
我目前有这个:
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()
运算符:
它将在每个 window 时间只发出第一个项目。
我想知道是否有一种干净的方法来实现可观察对象,它可以过滤掉在最近发出的事件之后 window 时间内发生的任何事件?
我目前有这个:
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()
运算符:
它将在每个 window 时间只发出第一个项目。