Как отследить количество испускаемых потоков? - PullRequest
0 голосов
/ 23 февраля 2019

Допустим, у меня есть плавный поток, на который подписано какое-то представление, и оно слушает изменения.Я хотел бы добавить пользовательский метод, основанный только на первом испускаемом потоке, но также сохраняя другие методы, которые прослушивают изменения.Каков наилучший способ приблизиться к этому?Наивный подход, который я имею, состоит в том, чтобы дублировать текучий и преобразовать его в Single или Completable, чтобы получить результаты, но это кажется излишним.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Я думаю, вы можете использовать для этого оператор share.Share оператор делает наблюдаемый подключаемым.А затем Connectable Observable публикует элементы, каждый из которых подписывается.

val o = Flowable.fromArray(1, 2, 3, 4, 5)
    .map {
        println("heavy operation")
        it + it
    }
    .share() // publish the changes
    .subscribeOn(Schedulers.computation()) // for testing. change what you want

o.take(1).subscribe { println("Special work: $it") } // take one

o.subscribe { println("Normal work: $it") }

Результат

heavy operation
Special work: 2
Normal work: 2
heavy operation
Normal work: 4
heavy operation
Normal work: 6
heavy operation
Normal work: 8
heavy operation
Normal work: 10
0 голосов
/ 23 февраля 2019

Используйте .take(1).Кстати, также убедитесь, что переменная является общей (иначе некоторые наблюдатели будут пропускать события).

...