我有一个可观察量列表,每个可观察量都返回一个字符串
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>
,但随后results
Array<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]
})
我没有找到其他解决方案