gpt4 book ai didi

java - RxJava,仅当第一个为空时才执行可观察

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:52:29 25 4
gpt4 key购买 nike

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

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

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

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

这是我尝试的最后一件事,但它在第二个 map 运算符处显示“循环推理”。

总结一下。我只想在第一个 Observable 完成时执行第二个 Observable,但如果不是,我不想返回第一个发出的数据,而是想返回 null。

非常感谢任何帮助。

最佳答案

switchIfEmpty 运算符用于这种操作:

checkAndReturnExistingUserObservable
.switchIfEmpty(insertAndReturnNewUserObservable)

编辑

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

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

关于java - RxJava,仅当第一个为空时才执行可观察,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34195218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com