我需要创建一个 Observable<T>
来自BehaviorSubject<Observable<T>>
。创建的可观察对象应该只发出一次项目,然后调用 onComplete()
.
有办法做到这一点吗?
谢谢!
编辑
private BehaviorSubject<Observable<T>> subject = BehaviorSubject.create();
public Observable<T> getObservable(){
//return the subject as Observable<T> which emits once and call onComplete()
}
最佳答案
所以,你有一个发出 Observable<T>
的BehaviorSubject s,并从中创建一个 Observable<T>
只发出由Subject发出的first Observable的first项。你可以这样做:
public Observable<T> getObservableWithJustOneElement(){
return subject.flatMap(new Func1<Observable<T>, Observable<T>>(){
@Override
public Observable<T> call(Observable<T> source) {
return source;
}
})
.take(1);
}
我知道它看起来有点奇怪,但它应该做你想做的事。一、flatMap
压平 Observable<Observable<T>>
只是一个 Observable<T>
(它只是不进行任何映射就转换元素而言)。然后,take(1)
确保仅发出一项 onNext()
之后onCompleted()
将被调用。
如果您只想要由主题发出的第一个 Observable 发出的项目,您可以使用它:
public Observable<T> getObservableWithJustOneElement(){
return subject.take(1)
.flatMap(new Func1<Observable<T>, Observable<T>>(){
@Override
public Observable<T> call(Observable<T> source) {
return source;
}
});
}
关于java - 如何创建从BehaviorSubject发射一次项目然后onComplete的Observable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26050423/