RxJava Наблюдаемые итерации Zip - PullRequest
0 голосов
/ 19 мая 2018

Я хочу сжать список Observable<List<Int>>.

fun testObservablezip() {
    val jobs = mutableListOf<Observable<List<Int>>>()
    for (i in 0 until 100 step 10) {
        val job = Observable.fromArray(listOf(i + 1, i + 2, i + 3))
        jobs.add(job)
    }

    val listMerger = Function<Array<List<Int>>, List<Int>> { it.flatMap { it } }
    Observable.zip(jobs, listMerger) // No valid function parameters
}

Даже если для listMerger определены вход и выход, zip не принимает его.

1 Ответ

0 голосов
/ 19 мая 2018
Функция

zip определена в RxJava как Function<? super Object[], R>, поэтому вы должны указать массив объектов, а не массив List<Int>, а затем привести элементы массива объектов обратно к List<Int>:

import io.reactivex.Observable
import io.reactivex.functions.Function;

fun testObservablezip() {
    val jobs = mutableListOf<Observable<List<Int>>>()
    for (i in 0 until 100 step 10) {
        val job = Observable.fromArray(listOf(i + 1, i + 2, i + 3))
        jobs.add(job)
    }

    val listMerger = Function<Array<Any>, List<Int>> { 
         it.flatMap { it as List<Int> } }

    Observable.zip(jobs, listMerger) // No valid function parameters
}
...