2017-11-16 10 views
0

私はfirebaseデータベースからすべてのCollectionItemVOをロードし、このMyCollectionInteractorていますオブジェクトに追加の内容を読み込んで別のオブザーバブルで変換するobservableを呼び出す方法は?

public interface MyCollectionInteractor extends BaseInteractor{ 
    Single<List<CollectionItemVO>> load(); 
} 

CollectionItemVOは次のとおりです。完全なビールを持っている

public class CollectionItem { 

    private final CollectionItemVO itemVOList; 
    private final Beer beer; 

    public CollectionItem(Beer beer, CollectionItemVO itemVOList) { 
     this.beer = beer; 
     this.itemVOList = itemVOList; 
    } 

} 

public class CollectionItemVO { 
    String beerId; 
    long timestamp; 
    int quantity; 

    public CollectionItemVO() { 
    } 


    public CollectionItemVO(String beerId, long timestamp, int quantity) { 
     this.beerId = beerId; 
     this.timestamp = timestamp; 
     this.quantity = quantity; 
    } 
} 

は、だから私はこの CollectionItemを持っていますオブジェクト。

public interface LoadBeerInteractor extends BaseInteractor { 
    Flowable<Beer> load(String beerId); 
} 

私はCollectionItemを発するObservableにこのCollectionInteractor.loadコールを変換したいと私は完全なビールオブジェクトに配信CollectionItemにLoadBeerInteractor.load(beerId)を使用したい:私は、この他の相互作用物質を使用して、そのオブジェクトをロードします。

私が勉強したことは、フラットマップを使ってそれを行うことは可能だと思いますが、まだ希望の結果を達成できていません。

答えて

2

私はあなたがこのような何かする必要があると思う:

MyCollectionInteractor collections = ... 
LoadBeerInteractor beers = ... 

Flowable<CollectionItem> items = collections.load() 
    .toFlowable() 
    .flatMapIterable(it -> it) // unpack from Flow<List<T>> to Flow<T> 
    .flatMap(it -> 
     beers 
      .load(it.beerId) 
      .map(beer -> new CollectionItem(beer, it)) 
    ) 

また、これはうまくいくかもしれない:

Flowable<CollectionItem> items = collections.load() 
    .toFlowable() 
    .flatMap(list -> 
     Flowable 
      .from(list) 
      .flatMap(it -> 
       beers 
        .load(it.beerId) 
        .map(beer -> new CollectionItem(beer, it)) 
      ) 
    ) 
+0

、それは非常によく働いたし!! – alexpfx

関連する問題