我正在寻找在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语句

10-07 18:41