[英]Transform a Single<List<Item>> to an Observable<Item>?
我從網絡請求調用中獲得了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(//.../);
我以為可以用map
轉換observables
的類型,所以我不太明白為什么第二個map
的參數是Observable<Item>
而不是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
的類型,請使用.flatMap()
有一些方法可以做到這一點:
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()
第一個是最簡單的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.