- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 Observable
返回单个 Cursor
实例(Observable<Cursor>
)。我正在尝试利用 ContentObservable.fromCursor
获取 onNext
中每个游标的行回调。
我想到的解决方案之一是这样的构造:
ContentObservable.fromCursor(cursorObservable.toBlocking().first())
.subscribe(cursor -> {
// map to object
// add to outer collection
}, e -> {}, () -> {
// do something with list of objects (outer collection)
});
由于 toBlocking().first()
,这看起来很像黑客攻击,但它有效。我不喜欢它,因为大部分处理都是在 onNext
中完成的回调,我们必须创建外部集合来保存中间结果。
我想像这样使用它:
cursorObservable.map(ContentObservable::fromCursor)
.map(fromCursor -> fromCursor.toBlocking().first())
.map(/* map to object */)
.toList()
.subscribe(objects -> {
// do something with list of objects
}
这还是利用了toBlocking().first()
并且不起作用,因为一旦 fromCursor
observable 已完成游标已关闭,因此无法将其映射到对象。有没有更好的方法来展平Observable<Observable<Cursor>>
至 Observable<Cursor>
?
最佳答案
Is there a better way to flatten
Observable<Observable<Cursor>>
toObservable<Cursor>
?
是的,您可以使用 Observable.concat
方法:
public static void main(String[] args) {
final Observable<String> observable = Observable.just("1", "2");
final Observable<Observable<String>> nested = observable.map(value -> Observable.just(value + "1", value + "2"));
final Observable<String> flattened = Observable.concat(nested);
flattened.subscribe(System.out::println);
}
更新
实际上还有其他一些方法可以转换 Observable<Observable<Cursor>>
至 Observable<Cursor>
:
只选择一个更适合你的。
更新 2
另一个解决方案是稍微修改您的代码并使用 flatMap
运算符而不是 map
:
cursorObservable.flatMap(ContentObservable::fromCursor)
.map(/* map to object */)
.toList()
.subscribe(objects -> {
// do something with list of objects (outer collection)
}
关于android - 将 Observable<Observable<Cursor>> 扁平化为 Observable<Cursor>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30075663/
出于好奇,我尝试了一些原型(prototype)制作,但似乎只允许在第一个位置使用子例程的原型(prototype) &。 当我写作时 sub test (&$$) { do_somethin
我需要开发一个类似于 Android Play 商店应用程序或类似 this app 的应用程序.我阅读了很多教程,发现几乎每个教程都有与 this one 类似的例子。 . 我已经开始使用我的应用程
考虑一个表示“事件之间的时间”的列: (5, 40, 3, 6, 0, 9, 0, 4, 5, 18, 2, 4, 3, 2) 我想将这些分组到 30 个桶中,但桶会重置。期望的结果: (0, 1,
我是一名优秀的程序员,十分优秀!