1つのWebページに表示するアイテムをロードしています。並行して、商品の価格を読み込んでいます。簡素化され、それは次のようになります。RxJava。 Observable/Flowableストリームからのすべてのアイテムに参加する
Observable<Integer> ids = itemIdsToShow(); // COLD Observable
Observable<Item> items = ids.flatMap(id -> loadingItem(id));
Observable<Price> prices = ids.flatMap(id -> loadingPrice(id));
UPDATE:どちらも「項目」と「価格」は順序付けされていません。
今すぐ一緒に参加したいです。
Observable<Long> wait = Observable.interval(1000, TimeUnit.SECONDS);
Observable<Pair<Item, Price>> pairs = items.join(prices, (ii)->wait, (pp)->wait, Pair::of);
Observable<Item2> items2 = pairs.filter(p->p.a.id == p.b.id).map(p->new Item2(p.a, p.b));
Observable "wait"は異常です。あるいは、完了しないObservableを使用することもできます。実際には、私は "項目"と "価格"の両方が完了すると、完了する観察可能なものが必要です。
次の提案は機能しません。
Observable<Object> wait = items.mergeWith(prices).takeLast(1);
方法「に参加」は、この新しい作成したID列の新世代を開始する、再び観測(およびすべてが最初から開始)サブスクライブします。私はかなり確信している
は、フルカスタム実装を作成せずに参加行うには、清潔で格好良い方法があります。
観測の両方で同じ順序で生成されたデータかどうかは、のみ動作します。これは、フェッチ部分は非常に疑問に簡略化されている代わりにflatMap – 30thh
チェックアウトconcatMap :-(ケースではありません。もともとそれは多重化および逆多重化を含む観測の長鎖から構成されています。私が交換した場合は、すべての「flatMapは」 "で呼び出しますconcatMap」、それはコードが読みにくくなり、それが同時実行のメリットを失うことになる。||||||この質問は、参加についてフェッチについてはあまりが、より多くのです。 –
の – 30thh