RxJavaを使用するために私の(Android)アプリケーションでいくつかのロジックを変換しようとしていますが、もっと高度なロジックを実行する方法を考え出すのに苦労しています。RxJavaで既存のデータを更新して保持する
ユースケースは次のとおりです。私はある種のフィードをユーザーに表示したいと思います。フィードはさまざまなソースからの項目で構成されています。メッセージ、記事などが含まれます.APIの制限により、アプリ自体は個々のソースを集めて1つのリストに表示する必要があります。例えば
、フィードに私の項目を前提とは、以下のようにされています。現在、フィードは別のスレッド上に構築されて
class FeedItem {
Type feedItem; // Type of the item, e.g. article, message, etc.
...
}
、およびUIは、フィードが更新された際、リスナーを使用して通知されます。どのように実行されたのかを知るために、以下にいくつかの(擬似的な)Javaコードを示します(わかりやすくするためにスレッドとその他の管理コードは省略しています)。
class FeedProducer {
List<FeedItem> currentData = new ArrayList();
public void refreshData() {
for (FeedSource source: getFeedSources()) {
Type sourceType = source.getType();
// Remove existing items
currentData.removeIf(item -> item.feedItem.equals(sourceType));
List<FeedItem> newItems = source.produceItems();
// Add the new items
currentData.addAll(newItems);
// Notify the UI things have changed
notifyDataChanged(currentData);
}
// Notify the UI we are done loading
notifyLoadingComplete();
}
}
この方法refreshData()
は、ユーザーがデータを更新しようとするたびに呼び出されます。この方法では、いくつかのソースのみを更新することができます(例えば、戻り値をgetFeedSources()
に変更するなど)。
これらのソースは、アプリの他の部分でも個別に使用されています。私はそれらをObservablesに変換しました。これにより、作業が非常に簡単になりました。データベースが変更された場合、変更はObservableによって簡単にUIにプッシュされます。
私の質問は、これらのObservableソースを1つのObservableにどのようにマージすることができますか(以前の結果の「グローバル」状態がある場合)です。私はさまざまな結合演算子を調べましたが、必要なものが見つかりませんでした。私がRxJavaをかなり新しくしているので、私が何か明白なものを見落としていたら謝ります。