我有接口返回的函数Flowable
interface Iface{
Flowable<Int> get();
}
现在让我们假设,具体的实现是:
class IFaceImpl{
int noOfSecs = 1;
Flowable<Int> get(){
return Flowable.interval(noOfSecs,TimeUnit.SECONDS)
}
}
我希望能够以这种方式更改
noOfSecs
参数,即Flowable.interval将每2s产生一次事件,而不是1s。当客户可以重新订阅时,这将很容易。就我而言,我不能这样做,我希望客户端仅订阅一次,但是可以更改Flowable的发射频率来更改。做这样的事情的最好方法是什么?
最佳答案
使用switchMap
动态停止先前的间隔并开始新的间隔。
class IfaceImpl {
final Subject<Long> nextInterval =
BehaviorSubject.createDefault(1)
.toSerialized();
Flowable<Long> get() {
return nextInterval.switchMap(seconds ->
Flowable.interval(seconds, TimeUnit.SECONDS)
);
}
void setNumberOfSeconds(int seconds) {
nextInterval.onNext(seconds);
}
}
关于java - 如何在不重新订购的情况下用Flowable替换另一个,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58990234/