Rx java 如何从过滤后的可观察对象中获取行为主体样行为?

Rx java 如何从过滤后的可观察对象中获取行为主体样行为?,rx-java,Rx Java,我有一个可观察的,我已经应用了一个过滤器。我希望从中获得行为主体类语义,这样在订阅时,订阅者将收到通过过滤器的最后一项。然而,BehaviorSubject似乎并没有被设计成被困在一个链条的中间,而仅仅是作为一个来源。p> 有什么方法可以做到这一点吗?您可以使用compose链接它们,例如: public class BehaviorSubjectTransformer<T> implements Observable.Transformer<T, T> { @

我有一个可观察的,我已经应用了一个过滤器。我希望从中获得行为主体类语义,这样在订阅时,订阅者将收到通过过滤器的最后一项。然而,BehaviorSubject似乎并没有被设计成被困在一个链条的中间,而仅仅是作为一个来源。p>
有什么方法可以做到这一点吗?

您可以使用
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);
        }
    });
}
公共类行为SubjectTransformer实现可观察的.Transformer{
@凌驾
公共可观测呼叫(可观测o){
BehaviorSubject subject=BehaviorSubject.create();
o、 认购(标的);
返回主题;
}
publicstaticobservable.Transformer创建(){
返回新的BehaviorSubjectTransformer();
}
}
@试验
公共图书馆{
Observable o=Observable.just(1,2,3).concatWith(Observable.never()).compose(BehaviorSubjectTransformer.create());
o、 订阅(新操作1){
@凌驾
公共无效调用(整数v){
系统输出打印项次(“1:+v”);
}
});
o、 订阅(新操作1){
@凌驾
公共无效调用(整数v){
System.out.println(“2:+v”);
}
});
}