我有一个观测值列表,每个观测值返回一个字符串
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
})
科特琳告诉我以下任何功能都不能称为... 错误。 我看到了一些有关 SAM构造函数的帖子,但是在这里我明确指定了类型。 无法解决。
P.S。。解决方法是Function<Array<in String>, String>
,然后results
将是Array<Any>
,而不是Array<String>
。
答案 0 :(得分:2)
您可以在lambda参数本身上指定类型,例如:
Observable.combineLatest(list, Function { results: Array<in String> ->
...
})
您可以通过删除SAM构造函数并将lambda移出combineLatest()
的参数列表中来进一步压缩事物,例如:
Observable.combineLatest(list) { results: Array<in String> ->
...
}
答案 1 :(得分:0)
我已经调查了来源
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]
})
我还没有找到其他解决方案