RxJava Zip 可观察迭代对象

5

我想要压缩一个 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个回答

8

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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接