将 Single> 转换为 Observable

2024-03-27

Goal

I get a Single<List<Item>>来自网络请求调用。最后,我想将这些物品用作Observable<Item2> or a Single<List<Item2>>。我从Item to Item2 with new Item2(Item item).

我认为可行的

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 with map,所以我不太明白为什么第二个参数map are Observable<Item>s 而不是 Item。
我怎样才能正确地实现这一目标?


如果我理解正确的话,你想转换Single<List<Item>>进入流Item2对象,并能够按顺序使用它们。在这种情况下,您需要将列表转换为可观察的,使用顺序发出项目.toObservable().flatMap(...)改变可观察对象的类型。

例如:

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(//.../);

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

items.toObservable()
            .flatMap(Observable::from)
            .map(Item2::new)
            .subscribeOn(//.../)
            .observeOn(//.../)
            .subscribe();

总结一下:如果你想改变类型Observable, use .flatMap()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Single> 转换为 Observable? 的相关文章

随机推荐