私はrxjava2で推奨される方法を探していますが、1つのフローが条件付きの動作につながるケースを扱うことができます。rxjava2 - もしかすると他の場合
より具体的には、私はそれが私が新しいString
を作成し、データベースに保存したく存在しない場合String
は、存在する場合や、データベース上String
を更新したいMaybe<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
を生成それが...奇妙だと感じる。
結果が存在する場合と存在しない場合の対処方法を教えてください。そのユースケースは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");
}
});
ソースObservableで2回購読しています。あなたはそれを二度実行することを意味します。両方のコードブロックで表示しています。 – masp
@maspあなたは正しいです、これは私のやっていることではありません。空と空でない結果を処理したいところで、私の問題をどのように解決することをお勧めしますか? – simon
最初のブロックの最初の3行は、実際は上手く見えます。しかし、彼らはあなたのソースが何かを発するケースだけをカバーします。したがって、ソースが何も出力しない(単純に完了する)別のケースを作成すると、2番目のObservableが実行されていることがわかります。また、個人的に私はdoOn *メソッドをログにのみ使用します。 – masp