簡體   English   中英

轉換單個 <List<Item> &gt;到可觀察的 <Item> ?

[英]Transform a Single<List<Item>> to an Observable<Item>?

目標

我從網絡請求調用中獲得了Single<List<Item>> 最后,我想將這些項目用作Observable<Item2>Single<List<Item2>> 我走的Item ,以Item2new 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM