Kotlin RxJava2 combine latest



我有一个可观察量列表,每个可观察量都返回一个字符串

val list = listOf<Observable<String>>(
Observable.fromCallable { "1" },
Observable.fromCallable { "2" },
Observable.fromCallable { "3" },
Observable.fromCallable { "4" }
)

我想把它们结合起来。

val result: Observable<String> = Observable.combineLatest(
list,
Function<Array<String>, String> { results ->
var resultString = ""
//combine
resultString
})

Kotlin 向我展示了以下任何函数都不能调用...错误。 我看到了一些关于SAM 构造函数的帖子,但在这里我明确指定了类型。 不知道如何解决。

附言解决方法是Function<Array<in String>, String>,但随后resultsArray<Any>,但不是Array<String>

您可以在 lambda 参数本身上指定类型,例如:

Observable.combineLatest(list, Function { results: Array<in String> ->
...
})

您可以通过删除 SAM 构造函数并将 lambda 移出参数列表来进一步压缩内容以进行combineLatest(),例如:

Observable.combineLatest(list) { results: Array<in String> ->
...
}

我已经调查了来源

public static <T, R> Observable<R> combineLatest(Iterable<? extends ObservableSource<? extends T>> sources,
Function<? super Object[], ? extends R> combiner) {
return combineLatest(sources, combiner, bufferSize());
}

? super Object[]

我认为你必须使用

Array <in String>

关于结果 - 您可以使用

Observable.combineLatest(
list,
Function<Array<in String>, String> { results ->
val resultList = results.map { it.toString() }
//combine
...
results[0]
})

我没有找到其他解决方案

相关内容

  • 没有找到相关文章

最新更新