Android 平坦可观察<;可观察<;光标>&燃气轮机;可观察<;光标>;
我有一个Android 平坦可观察<;可观察<;光标>&燃气轮机;可观察<;光标>;,android,rx-java,rx-android,Android,Rx Java,Rx Android,我有一个Observable,它返回一个游标实例(Observable)。我试图利用ContentObservable.fromCursor获取onNext回调中每个游标的行 我找到的解决方案之一就是这样的构造: ContentObservable.fromCursor(cursorObservable.toBlocking().first()) .subscribe(cursor -> { // map to object // add to o
Observable
,它返回一个游标
实例(Observable
)。我试图利用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完成,光标将关闭,因此无法将其映射到对象。是否有更好的方法将可观察的
展平到可观察的
是否有更好的方法将可观察的
展平到可观察的
是的,您可以使用以下方法:
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);
}
cursorObservable.flatMap(ContentObservable::fromCursor)
.map(/* map to object */)
.toList()
.subscribe(objects -> {
// do something with list of objects (outer collection)
}