我正在寻找在rxjava2中推荐的做法,以处理一种可流动导致条件行为的情况。
更具体地说,我有一个Maybe<String>
,如果String
存在,我想为其更新数据库上的String
,或者如果不存在,我想创建一个新的String
并将其保存在数据库中。
我想到了以下内容,但显然不是我想要的内容:
Maybe<String> source = Maybe.just(new String("foo")); //oversimplified source
source.switchIfEmpty(Maybe.just(new String("bar"))).subscribe(result ->
System.out.println("save to database "+result));
source.subscribe(result -> System.out.println("update result "+result));
以上明显产生
save to database foo
update result foo
我还在下面尝试了给出预期结果的方法,但是仍然觉得它很奇怪。
Maybe<String> source = Maybe.just(new String("foo")); //oversimplified source
source.switchIfEmpty(Maybe.just(new String("bar")).doOnSuccess(result ->
System.out.println("save to database "+result))).subscribe();
source.doOnSuccess(result -> System.out.println("update result "+result)).subscribe();
如何处理结果何时存在以及何时不存在?该用例应如何在rxjava2中处理?
更新01
我尝试了下面的方法,看起来比上面的方法干净。请注意,请确保建议您使用rxjava2实践。
Maybe.just(new String("foo"))
.map(value -> Optional.of(value))
.defaultIfEmpty(Optional.empty())
.subscribe(result -> {
if(result.isPresent()) {
System.out.println("update result "+result);
}
else {
System.out.println("save to database "+"bar");
}
});
最佳答案
您具有isEmpty()运算符,如果Maybe源是否为空,该运算符将返回Boolean,然后可以flatMap它并根据该 boolean 值编写if else语句