首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将Single<List<Item>>转换为Observable<Item>?

将Single<List<Item>>转换为Observable<Item>?
EN

Stack Overflow用户
提问于 2016-10-01 07:24:53
回答 2查看 6.3K关注 0票数 3

目标

我从一个网络请求呼叫中得到一个Single<List<Item>>。最后,我想将这些项目作为Observable<Item2>Single<List<Item2>>使用。我和Item一起从Item2new Item2(Item item)

我以为会起作用的

代码语言:javascript
运行
复制
Single<List<Item>> items
    .map(Observable::fromIterable) // Single<List> to Observable
    .map(new Function<Observable<Item>, Observable<Item2>>() {
      // I don't really know how I can do it here
    })
    .subscribeOn(//.../)
    .observeOn(//.../);

我以为我可以用observables转换map的类型,所以我不太明白为什么第二个map的参数是Observable<Item>而不是Item。

我如何才能恰当地做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-01 08:51:06

如果我正确理解,您希望将Single<List<Item>>转换为Item2对象流,并能够依次使用它们。在这种情况下,您需要将list转换为可观察的,使用.toObservable().flatMap(...)依次发布项以更改可观察对象的类型。

例如:

代码语言:javascript
运行
复制
Single<List<Item>> items = Single.just(new ArrayList<>());
items.toObservable()
            .flatMap(new Func1<List<Item>, Observable<Item>>() {
                @Override
                public Observable<Item> call(List<Item> items) {
                    return Observable.from(items);
                }
            })
            .map(new Func1<Item, Item2>() {
                @Override
                public Item2 call(Item item) {
                    return new Item2(item);
                }
            })
            .subscribeOn(//.../)
            .observeOn(//.../);

或者,使用方法引用可以使代码更加简单:

代码语言:javascript
运行
复制
items.toObservable()
            .flatMap(Observable::from)
            .map(Item2::new)
            .subscribeOn(//.../)
            .observeOn(//.../)
            .subscribe();

总结:如果要更改Observable的类型,请使用.flatMap()

票数 6
EN

Stack Overflow用户

发布于 2019-04-30 02:21:55

有一些方法可以做到这一点:

代码语言:javascript
运行
复制
items.flatMapObservable(Observable::fromIterable).map(Item2::new).toList()

// or

items.toObservable.flatMap(Observable::fromIterable).map(Item2::new).toList()

// or

items.toObservable().flatMapIterable(Functions.identity()).map(Item2::new).toList()

第一个是最简单的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39804056

复制
相关文章

相似问题

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