RxJava,仅当first为空时才执行observable

RxJava,仅当first为空时才执行observable,java,rx-java,Java,Rx Java,仅当不存在具有相同电子邮件的用户时,我才想将新用户插入我的数据库 因此,我有两个观测值: 第一个发送给用户一封特定的电子邮件,或者在不发送任何内容的情况下完成。 第二个可观察对象插入一个新用户并返回这个新创建用户的对象 我的问题是,我不希望由第一个可观察对象(如果存在)发送的用户被传输到订户。相反,我希望将其映射为null) Observable-Observable= checkAndReturnExistingUserObservable .map(现有用户->空) .第一道防线( inse

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

因此,我有两个观测值: 第一个发送给用户一封特定的电子邮件,或者在不发送任何内容的情况下完成。 第二个可观察对象插入一个新用户并返回这个新创建用户的对象

我的问题是,我不希望由第一个可观察对象(如果存在)发送的用户被传输到订户。相反,我希望将其映射为null)

Observable-Observable=
checkAndReturnExistingUserObservable
.map(现有用户->空)
.第一道防线(
insertAndReturnNewUserObservable
.map(insertedUser->mMapper.map(insertedUser)
)
这是我最后一次尝试,但在第二个map操作符上显示“循环推理”

总而言之,我只想在第一个完成的数据为空时执行第二个可观察的,但如果不是,我不想返回第一个完成的数据,而是想返回null


非常感谢您的帮助。

对于此类操作,有
开关ifempty
操作员:

checkAndReturnExistingUserObservable
.switchIfEmpty(insertAndReturnNewUserObservable)
编辑

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

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

我有一个关于操作符的anwser,可以用来正确发射对象。但是,我不太确定循环推理。你能发布
insertAndReturnNewUserObservable
mMapper.map(…)的代码吗
只是为了确定。另外,依我看,返回null是一个非常糟糕的主意。但我会在看到您的代码后在我的回答中给出详细信息;)他也希望在空时发出null值,但我认为switchIfEmpty是最好的解决方案!如果用户存在,我不确定OP为什么希望为null,但如果需要,可以在switchIfEmpty之前映射它。OP还可以使用虚拟用户对象,而不是用户对象本身中的null或新标志。否则,会有一个基于平面图的答案(现在已删除)。这种方法的问题是,它还将返回找到的第一个可观察对象的用户(我不想要的)。目前我正在尝试平面图的答案,它似乎以一种干净的方式解决了我的问题。不幸的是,它被删除了,所以我不能接受它是正确的。
checkAndReturnExistingUserObservable
.map(v -> true).firstOrDefault(false)
.flatMap(exists -> exists ? Observable.empty() : insertAndReturnNewUserObservable);