java - 如何在不重新订阅的情况下替换 Flowable

标签 java rx-java2

我有一个返回 Flowable 的函数接口(interface)

interface Iface{
   Flowable<Int> get();
}

现在让我们假设具体实现是:

class IFaceImpl{
  int noOfSecs = 1;
  Flowable<Int> get(){
    return Flowable.interval(noOfSecs,TimeUnit.SECONDS)
  }
}

我希望能够更改 noOfSecs 参数,使 Flowable.interval 每 2 秒生成一次事件,而不是 1 秒。当客户只需重新订阅时,这会很容易。就我而言,我不能这样做,我希望客户端只订阅一次,但能够更改 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/

相关文章:

java - 读写 COM 端口?

java - Maven 原型(prototype) : Validate artifactId or groupId

Java:按位异或运算符如何评估条件? (^)

android - 无法在 Kotlin Android 中的 Observable 上调用 from() 运算符

java - 如果输入流的合并 Flowable 已关闭,如何继续合并 Flowable,RxJava 2.x

java - toBlockingFirst方法靠谱吗?

android - 错误转换 observable.subscribe

kotlin - 传递观察者并将 lambda 传递给skipUntil 方法

java - 要 SOAP,还是不要 SOAP?就是那个问题

java - 自定义数组循环推送数据