Rx java 如何终止观察者可观察到的源';s onNext方法

Rx java 如何终止观察者可观察到的源';s onNext方法,rx-java,Rx Java,我想知道从Observer的onNext方法中终止可观测源的最佳方法是什么 例如,我希望在验证正常时按钮事件只发出一次。但是,当验证失败时,按钮事件可以再次发出 下面是我能想到的 Observable.... .subscribe(new Subscriber(){ public void onNext(T t){ // do something and terminate the Observable // only wh

我想知道从Observer的onNext方法中终止可观测源的最佳方法是什么

例如,我希望在验证正常时按钮事件只发出一次。但是,当验证失败时,按钮事件可以再次发出

下面是我能想到的

Observable....
    .subscribe(new Subscriber(){
        public void onNext(T t){
            // do something and terminate the Observable
            // only when the validate method return true
            if (validate(t)){
                 doSomething(t);
                 unsubscribe();
            }
         }
         ...
     });
然而,如果我需要一个未完成的事件,它就不起作用。 此外,我不确定是否要从Observer的
onNext()调用
onCompleted()

此外,我认为将验证引入可观察性并不是一个好主意,因为观察者必须承担验证的责任。
此外,在“热”观察的情况下,如果观察者有一些观察者,则验证可能与每个观察者不同。

对于此类情况,您可以使用类似于
takeUntil
takeWhile
的操作符:

Observable....
    .takeUntil(t -> validate(t))
    .subscribe(t -> doSomething(t));

一般提示:阅读。大部分答案已经在那里找到了。此外,在某些情况下,如果您自己绘制大理石图,然后将其与参考页面上的图形进行比较,则会有所帮助。最后,您可以对某些操作员进行测试。

谢谢您的回答!我认识接线员,但我不明白这个意思。由于可观察对象的来源是一个对象,我强迫自己使用一个可观察对象来处理每个观察者的不同验证。然而,在这种情况下,我可以创建一些可观察的对象。我认为,使用Rx最困难的部分可能是灵活思考。再次感谢大家!!