RxJava,只有在第一个为空时才执行observable

时间:2015-12-10 06:34:22

标签: java rx-java

我希望仅在具有相同电子邮件的用户不存在时才将新用户插入我的数据库。

因此我有两个Observable: 第一个用特定电子邮件发出用户或完成而不发送任何内容。 第二个Observable插入一个新用户并返回这个新创建的用户的Object。

我的问题是,我不希望第一个Observable(如果存在)所发送的用户被传输到订阅者。相反,我想把它映射到null)。

Observable<UserViewModel> observable = 
    checkAndReturnExistingUserObservable
        .map(existingUser -> null)
        .firstOrDefault(
            insertAndReturnNewUserObservable
                .map(insertedUser -> mMapper.map(insertedUser)
        )

这是我尝试过的最后一件事,但它表示&#34;循环推理&#34;在第二个地图运营商。

总结一下。我只想在第一个完成空的情况下执行第二个Observable,但如果不是我不想首先返回数据,而不想返回null。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:11)

这种操作有switchIfEmpty运算符:

checkAndReturnExistingUserObservable
.switchIfEmpty(insertAndReturnNewUserObservable)

修改

如果您不需要现有用户,则会有一个基于flatMap的答案,将第一个检查转换为布尔值,并根据其值进行调度:

checkAndReturnExistingUserObservable
.map(v -> true).firstOrDefault(false)
.flatMap(exists -> exists ? Observable.empty() : insertAndReturnNewUserObservable);