spO*_*oks 21 android rx-android rx-java2
我正在尝试整理我的代码,并且Single看起来对我来说是一个不错的选择,因为我正在做一些只能发出一个结果的东西.
我遇到了一个问题,因为我以前使用flatMapIterable我的回复(列表)并对每个项目做一些事情.我没有看到我如何用Single实现这个目标.
getListOfItems()
.flatMapIterable(items -> items)
.flatMap(item -> doSomethingWithItem())
.toList()
Run Code Online (Sandbox Code Playgroud)
如果能正常工作getListOfItems是返回一个Observable,但如果我试图使它返回Single,那么我不能这样做flatMapIterable,不能看到另一种,任何想法?
yos*_*riz 43
flattenAsObservable应该做的伎俩,它将Single成功值映射到Iterable(列表),并将列表中的每个项目作为一个Observable.
getListOfItems()
.flattenAsObservable(new Function<Object, Iterable<?>>() {
@Override
public Iterable<?> apply(@NonNull Object o) throws Exception {
return toItems(o);
}
})
.flatMap(item -> doSomethingWithItem())
.toList()
Run Code Online (Sandbox Code Playgroud)
基于yosriz的答案,这就是我最后在Kotlin遇到的问题
getListOfItems()
.flattenAsObservable { it }
.flatMap { doSomethingWithItem(it) }
.toList()
Run Code Online (Sandbox Code Playgroud)
使用Kotlin's可以达到相同的效果map,具体取决于您的偏好:
getListOfItems()
.map { items ->
items.map {
doSomethingWithItem(it)
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以使用运算符转换Single为ObservabletoObservable()
它看起来像这样:
getListOfItems()
.toObservable()
.flatMapIterable(items -> items)
.flatMap(item -> doSomethingWithItem())
.toList()
Run Code Online (Sandbox Code Playgroud)