動作をリセットする方法Subject 質問する

動作をリセットする方法Subject 質問する

リセットしたい がありますBehaviorSubject。つまり、最新の値が、作成されたばかりのように使用できないようにしたいのです。

これを行うための API は見当たらないようですが、同じ結果を達成する別の方法があると思いますか?

私が望む動作は、イベントを発行する必要があり、特定のマネージャーが「開始」状態にある場合に、サブスクライバーがサブスクライブしたときに最新のイベントを取得できるようにすることです。ただし、このマネージャーが「停止」されている場合は、最新のイベントは利用できません (そもそも開始されなかった場合と同じです)。

ベストアンサー1

をクリアしたいのだと思いますBehaviorSubject(そうしないと、onCompleteそれを呼び出しません)。これはサポートされていませんが、消費者によって無視される現在の値を持つことで同様の効果を得ることができます。

public static final Object EMPTY = new Object();

BehaviorSubject<Object> subject = BehaviorSubject.createDefault(EMPTY);

Observable<YourType> obs = subject.filter(v -> v != EMPTY).cast(YourType.class);

obs.subscribe(System.out::println);

// send normal data
subject.onNext(1);
subject.onNext(2);

// clear the subject
subject.onNext(EMPTY);

// this should not print anything
obs.subscribe(System.out::println);

おすすめ記事