【问题标题】:How to get BehaviorSubject-like behavior from a filtered Observable?如何从过滤后的 Observable 中获取类似 BehaviorSubject 的行为?
【发布时间】:2015-06-15 22:16:59
【问题描述】:

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

有没有办法做到这一点?

【问题讨论】:

    标签: rx-java


    【解决方案1】:

    你可以使用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);
            }
        });
    }
    

    【讨论】:

      猜你喜欢
      • 2020-03-08
      • 1970-01-01
      • 1970-01-01
      • 2020-01-18
      • 1970-01-01
      • 1970-01-01
      • 2019-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多