RxAndroid: Как излучать молнию наблюдаемой каждую минуту? - PullRequest
0 голосов
/ 31 октября 2018
Observable<List<Stop>> zippedObservable = Observable.zip(observableList, objects -> {
    List<Stop> stopList = Collections.emptyList();
    for (Object obj : objects) {
        stopList.add((Stop) obj);
    }
    return stopList;
});

У меня есть переменная zippedObservable, которая была заархивирована несколькими наблюдаемыми.

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

Эта функция успешно генерирует элементы (zip stop list), но я бы хотел генерировать эти элементы каждую минуту. Я предполагал, что оператор interval будет идеальным для этого случая, но я не мог понять, как смешать функции zip и interval.

Это то, что я пытался

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

Я ищу кого-то, кто объяснит, как смешать эти два оператора, чтобы я мог генерировать элементы каждую минуту. Спасибо.

1 Ответ

0 голосов
/ 31 октября 2018

interval - это статический метод, который создает Observable<Long>, который испускает Long в данный период или интервал.

Чтобы достичь того, что вы описываете, вам нужно использовать один такой Observable, чтобы ходить по молнии Observable:

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

В этом случае он будет просто излучать не более одного результата zipped каждую минуту, независимо от того, что излучает zipped. Я не уверен, что ты этого хочешь.

Если вы хотите просто переиздавать одно и то же значение снова и снова, вы можете добавить repeat() между ними.

...