如何从过滤后的 Observable 中获取类似 BehaviorSubject 的行为?

How to get BehaviorSubject-like behavior from a filtered Observable?

我有一个已应用过滤器的 Observable。我想从中获取类似 BehaviorSubject 的语义,以便在订阅时,订阅者收到最后一个通过过滤器的项目。然而,BehaviorSubject 似乎并没有被设计成卡在链的中间,而只是作为一个来源。

有没有办法做到这一点?

您可以使用compose来链接它们,例如:

public class BehaviorSubjectTransformer<T> implements Observable.Transformer<T, T> {

    @Override
    public Observable<T> call(Observable<T> o) {
        BehaviorSubject<T> subject = BehaviorSubject.create();
        o.subscribe(subject);
        return subject;
    }

    public static <T> Observable.Transformer<T, T> create() {
        return new BehaviorSubjectTransformer<T>();
    }
}

@Test
public void foo() {
    Observable<Integer> o = Observable.just(1, 2, 3).concatWith(Observable.never()).compose(BehaviorSubjectTransformer.create());
    o.subscribe(new Action1<Integer>() {
        @Override
        public void call(Integer v) {
            System.out.println("1: " + v);
        }
    });
    o.subscribe(new Action1<Integer>() {
        @Override
        public void call(Integer v) {
            System.out.println("2: " + v);
        }
    });
}