我有一个应用了过滤器的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);
}
});
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句