/ PublishSubjectを使用して特定のObserverに公開する - android、rx-android、rx-java2

PublishSubjectを使用して特定のObserverに公開する - android、rx-android、rx-java2

私は ViewPager すなわち、2つのページ 人気 そして すべて。私が達成しようとしているのは、人気タグを持っているプッシュアイテムだけです 人気 一方、すべての項目を すべて.

現在、私は1つのクラスを持っています。 PagerAdapter ページ・タイプを渡します。どのように除外するのですか? PublishSubject 各ページに必要な項目のみが表示されます。

私のオブザーバーはどちらもシングル PublishSubject、 しかし、私 発光時にフィルタリングしたい

質問が不明な場合はコメントしてください。私はこの問題を中継するために最善を尽くすつもりです。また、関連するものを見つけることができなかったので、すでに答えられていればごめんなさい。

私が使用しているコードは この に基づく このアーキテクチャ 私はFirebaseのデータストアを持っています FirebaseSubscriptionDataStore それは PublishSubject。これは後で SubscribeToSubscriptionUpdatesSubscriptionListPresenterImpl

前もって感謝します。

回答:

回答№1は1

あなたは基本的に2つの異なるメソッドを定義して Observable (またはフロアブル)から PublishSubject。最初に観察可能なものはすべてのアイテムを放出し、2番目のものは人気のあるもののみを放出する:

public class DataStore {

private PublishSubject<DataItem> dataItemPublishSubject = PublishSubject.create();

public Flowable<DataItem> getAllObservable() {
return dataItemPublishSubject.toFlowable(BackpressureStrategy.BUFFER);
}

public Flowable<DataItem> getPopularObservable() {
return dataItemPublishSubject.toFlowable(BackpressureStrategy.BUFFER)
.filter(new Predicate<DataItem>() {
@Override
public boolean test(DataItem dataItem) throws Exception {
return dataItem.popular;
}
});
}

public static class DataItem {
public final boolean popular;

public DataItem(boolean popular) {
this.popular = popular;
}
}
}

あなたが2つの方法を望んでいない場合、あなたは .filter() あなたのRxチェーン内のどこにでも演算子があり、あなたは次のようなものになるかもしれません:

    dataStore.getAllObservable()
.doOnNext(new Consumer<DataStore.DataItem>() {
@Override
public void accept(DataStore.DataItem dataItem) throws Exception {
pagerAdapter.addDataAll(dataItem);
}
})
.filter(new Predicate<DataStore.DataItem>() {
@Override
public boolean test(DataStore.DataItem dataItem) throws Exception {
return dataItem.popular;
}
})
.doOnNext(new Consumer<DataStore.DataItem>() {
@Override
public void accept(DataStore.DataItem dataItem) throws Exception {
pagerAdapter.addDataPopular(dataItem);
}
})
.subscribe();