Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 平坦可观察<;可观察<;光标>&燃气轮机;可观察<;光标>;_Android_Rx Java_Rx Android - Fatal编程技术网

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)
    }