Rx java RxJava与布尔运算符组合

Rx java RxJava与布尔运算符组合,rx-java,reactive-programming,rx-android,greendao,Rx Java,Reactive Programming,Rx Android,Greendao,我有两个可观察对象observableDisconnectContact负责调用API请求以删除联系人,并且工作正常。如果联系人已从数据库中删除,则第二个observableDeleteContact将发出true或false。我使用greeDao Observable<Boolean> observableDisconnectContact = apiClient.observableDisconnectContact(contactModel.getId()) Observa

我有两个
可观察对象
observableDisconnectContact
负责调用API请求以删除联系人,并且工作正常。如果联系人已从数据库中删除,则第二个
observableDeleteContact
将发出true或false。我使用
greeDao

Observable<Boolean> observableDisconnectContact = apiClient.observableDisconnectContact(contactModel.getId()) 

Observable<Boolean> observableDeleteContact = contactModelRxDao.deleteByKey(contactModel.getDbId())
可观察的断开触点
.filter(新函数1(){
@凌驾
公共布尔调用(布尔aBoolean){
返回aBoolean;
}
})
.flatMap(新函数1(){
@凌驾
公共可观测呼叫(对象o){
返回可观察的联系人;
}
});

如果
observatedisconnectcontact
发出
true
则结果observatedeletecontact将发出
observatedeletecontact
的结果,如果
false
则过滤(不发出任何内容),我相信使用正确的成功和失败语义将使代码更具可读性。我的意思是使用
Completable
,它要么在成功时完成,要么在失败时发出错误

observableDisconnectContact
        .flatMap(isDisconnectSuccessful -> {
            if(isDisconnectSuccessful) return observableDeleteContact;
            else return Observable.just(false);
         })
         .subscribe(isBothActionsSuccessful -> {
             if(isBothActionsSuccessful) {
                 //success!
             } else {
                 //something goes wrong
             }
         });
例如:

Completable observableDisconnectContact = ...;
Completable observableDeleteContact = ...;

observableDisconnectContact
    .andThen(observableDeleteContact)
    .subscribe(new CompletableObserver() {
            @Override
            public void onComplete() {
            }

            @Override
            public void onError(Throwable e) {
            }
        });

注意:代码可能无法编译,因为我没有在任何地方测试它。如果发现任何错误,请进行编辑

它几乎正常。如果
observedisconnectcontact
发出false,则调用just
oncompleted()
。有可能发射假信号吗?@Michael有可能,请检查我的答案
observableDisconnectContact
        .flatMap(isDisconnectSuccessful -> {
            if(isDisconnectSuccessful) return observableDeleteContact;
            else return Observable.just(false);
         })
         .subscribe(isBothActionsSuccessful -> {
             if(isBothActionsSuccessful) {
                 //success!
             } else {
                 //something goes wrong
             }
         });
Completable observableDisconnectContact = ...;
Completable observableDeleteContact = ...;

observableDisconnectContact
    .andThen(observableDeleteContact)
    .subscribe(new CompletableObserver() {
            @Override
            public void onComplete() {
            }

            @Override
            public void onError(Throwable e) {
            }
        });