Изменить наблюдаемый для интервала типа на лету - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь решить конкретную проблему.Основываясь на том, что было испущено, я бы хотел поочередно преобразовывать наблюдаемые из одного типа в другой.

Так, например:

Observable.just(Math.random()).flatMap { item ->
 if (item > 0.5) {
convert to interval type and repat new Math.random() every specific time interval 
} else {
leave as it is
}
}

Правильно, я знаю, что придумал этот наивныйподход которого я не рад.

if (needToRepeat) {
make Observable.interval().flatMap { prepareObservable() }
} else { prepareObservable() }

fun prepareObservable() = Observable.just(Match.random()).map { boolean = it.boolean }

1 Ответ

1 голос
/ 02 мая 2019

Вы можете попробовать что-то вроде этого:

Observable.just(Math.random())
        .switchMap { item ->
            if (item > 0.5) {
                Observable.interval(1, TimeUnit.SECONDS).map { Math.random() }
            } else {
                Observable.just(item)
            }
        }

Для каждого item, если условие выполнено, это создаст Observable, излучающий случайный Double каждую секунду.
При switchMap каждый раз, когда внешний Observable испускает новый item, предыдущий внутренний Observable удаляется, так что вы всегда получаете выбросы только самого последнего `Observable.

...