首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Observable<Observable<Cursor>>压平到Observable<Cursor>

将Observable<Observable<Cursor>>压平到Observable<Cursor>
EN

Stack Overflow用户
提问于 2015-05-06 11:40:34
回答 1查看 3K关注 0票数 5

我有一个Observable,它返回一个Cursor实例(Observable<Cursor>)。我试图利用ContentObservable.fromCursor获取onNext回调中的每个游标行。

我想出的解决方案之一就是这样的结构:

代码语言:javascript
复制
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回调中完成的,我们必须创建外部集合来保存中间结果。

我想这样用它:

代码语言:javascript
复制
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<Cursor>>压平到Observable<Cursor>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-06 11:52:16

是否有更好的方法将Observable<Observable<Cursor>>压平到Observable<Cursor>

是的,您可以使用Observable.concat方法:

代码语言:javascript
复制
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>

  • Observable.concat
  • Observable.merge
  • Observable.switchOnNext

只要选择一个对你更合适的。

更新2

另一种解决方案是修改代码,使用flatMap操作符而不是map

代码语言:javascript
复制
cursorObservable.flatMap(ContentObservable::fromCursor)
    .map(/* map to object */)
    .toList()
    .subscribe(objects -> {
        // do something with list of objects (outer collection)
    }
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30075663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档