【问题标题】:RxAndroid : How to emit zipped observable every minute?RxAndroid:如何每分钟发出压缩的 observable?
【发布时间】:2018-10-31 00:23:10
【问题描述】:
Observable<List<Stop>> zippedObservable = Observable.zip(observableList, objects -> {
    List<Stop> stopList = Collections.emptyList();
    for (Object obj : objects) {
        stopList.add((Stop) obj);
    }
    return stopList;
});

我有 zippedObservable 变量,它被多个 observables 压缩。

disposable.add(zippedObservable.observeOn(AndroidSchedulers.mainThread())
    .subscribeWith(new DisposableObserver<List<Stop>>() {
    // onNext, onComplete, onError omitted
}));

此函数成功发出项目(压缩停止列表),但我想每分钟发出这些项目。我认为interval 运算符非常适合这种情况,但我不知道如何混合zipinterval 功能。

这是我尝试过的

zippedObservale.interval() // cannot call interval operator here.
Observable.zip(...).interval() // cannot call interval operator here too.

我正在找人解释如何混合这两个运算符,以便我可以每分钟发出项目。谢谢。

【问题讨论】:

    标签: java android rx-java2 rx-android


    【解决方案1】:

    interval 是一个静态方法,它创建一个Observable&lt;Long&gt;,它在给定的周期或间隔发出一个Long

    要实现您所描述的,您需要使用一个这样的Observable 来调整您的压缩Observable

    Observable<List<Stop>> zipped = ...;
    Observable<Long> interval = Observable.interval(...);
    Observable<List<Stop>> everyMinute = zipped.sample(interval);
    

    在这种情况下,它只会每分钟最多发出一个zipped 的结果,而不管zipped 发出的任何其他结果。我不确定这就是你想要的。

    如果您只想一遍又一遍地重新发出相同的值,您可能需要在两者之间添加一个repeat()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多