java - 如何创建从BehaviorSubject发射一次项目然后onComplete的Observable?

标签 java rx-java

我需要创建一个 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/

相关文章:

java - netbeans 找不到 java.lang 没有 jdk9

android - 在 RxJava2(Android) 中订阅与订阅?

java - Reactive 和 Reactive Streams 有什么区别?

java - 从数据库中获取记录并自动生成树

java - 尝试通过读取 Java 中的文本字段来获取机器人按键

java - RxJava 2.0 - 处理 publish().refCount() 中未捕获订阅者错误的资源

android - 使用 .just() 运算符时如何添加延迟

java - 如何修复 "MissingBackpressureException"

java - 如何以database为参数连接mysql数据库服务器

java - Netbeans 8.0.2 中 Java Web 应用程序的非英语数据输入