我有接口返回的函数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/

10-13 06:26