目标
我从一个网络请求呼叫中得到一个Single<List<Item>>
。最后,我想将这些项目作为Observable<Item2>
或Single<List<Item2>>
使用。我和Item
一起从Item2
到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
转换map
的类型,所以我不太明白为什么第二个map
的参数是Observable<Item>
而不是Item。
我如何才能恰当地做到这一点?
发布于 2016-10-01 08:51:06
如果我正确理解,您希望将Single<List<Item>>
转换为Item2
对象流,并能够依次使用它们。在这种情况下,您需要将list转换为可观察的,使用.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
的类型,请使用.flatMap()
发布于 2019-04-30 02:21:55
有一些方法可以做到这一点:
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()
第一个是最简单的。
https://stackoverflow.com/questions/39804056
复制相似问题