Наблюдаемый или оператор, который испускает параллельные потоки, но всегда включает последнее излучение из всех потоков - PullRequest
0 голосов
/ 14 июня 2019

Существует ли наблюдаемый или Rx-оператор, который может взять несколько наблюдаемых (несколько потоков) и представить их вместе в функции и где предоставляется самое последнее излучение из каждого потока?Самым близким, что я мог найти, был CombineLast, но он будет работать, только если все потоки отправили элемент.Если у меня есть 4 наблюдаемых, но только 3 из них испускают предметы, я хочу увидеть эти 3. Из этих 3, если один из них постоянно излучает, но два других ничего не излучали через некоторое время, я все еще хочу увидеть последний выброс изэти 2 вместе с последним из того, который постоянно излучает.

Чего я не хочу, так это иметь что-то, что объединяет все потоки в один.Они должны оставаться отдельными.

1 Ответ

0 голосов
/ 14 июня 2019

Вы можете объединить их с combineLatest и предоставить функцию для переноса значений в пользовательский класс:

    Observable.combineLatest(
            source1,
            source2,
            source3,
            source44,
            Function4<String, String, String, String, LatestResult> { t1, t2, t3, t4 ->
                LatestResult(t1, t2, t3, t4)
            })
            .subscribe { latestResult ->
                // Access the latest results here:
                println(latestResult.text1)
                println(latestResult.text2)
                println(latestResult.text3)
                println(latestResult.text4)
            }
}

data class LatestResult(val text1: String, val text2: String, val text3: String, val text4: String)

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

...