2017-04-14 20 views
-2

異なる観測タイプを順番に組み合わせて結果を比較する最良の方法を理解しようとしています。 zipとcombineLatestを見て、私は彼らが適切だとは思わない。次のようなことをするには?観測値を結合して以前の値と比較するRxJava

@Test 
    public void shouldInsertRecord(){ 



     BidsEntity bid = new BidsEntity(/* omitted */); 


     Observable<Integer> count1 = bidsRepository.getBid(bid.getUserId(), bid.getListingId()).count(); 

     Observable<Boolean> insert = bidsRepository.insertBid(bid); 

     Observable<Integer> count2 = bidsRepository.getBid(bid.getUserId(), bid.getListingId()).count(); 


     //run count1, run insert, run count2 in that order 
     //assert that count2 is greater than count1 

    } 
+0

コードには無関係なものがたくさんあります。また、組み合わせの結果としてどのような配列が期待されるのかは明らかではありません。代わりに、単に入力シーケンスの例と予想される結合出力シーケンスを提供することができます。 – yurgis

+0

こんにちは@yurgis、私は何が無関係であるか分かりません - 私は3つの操作を行い、操作1と操作3の結果を比較しようとしています。 –

+0

私はちょうど、その場合は、すべての3つのオブザーバブルにtoBlocking()。singleOrDefault()を適用するだけです。テストコードでブロッキングを使用するのはまったく問題ありません。あなたが持っている別のオプションは、非同期呼び出しの前にCountDownLatchを3に設定し、onNextでcountDownを呼び出して、3つ全てを観察し、AtomicIntegersとAtomicBooleanの値を取得することです。非同期呼び出しの後、すべての値がアトミックバールに到達するまでブロックするlatch.await()を使用します。 – yurgis

答えて

0

(別名、ブロッキング)シーケンシャルされていないがReactiveXのポイントのようなものです。

あなたの例を見てみると、入札単価が挿入されるたびに値を出す単一の観測可能性があると思います。次に、あなたはその観察可能なものを購読し、あなたが単一の観察者の情報で何をしたいのかを決める。

既に適切な設定があります。 bidsRepository.getBid(...)に、新しい入札単価が追加されるたびに発行される観測値を返し、count変数を単一のオブザーバに置き換えます。

+0

ノンブロッキングがポイントであることは間違いありませんが、このようなテストのために何らかの方法で注文を保証する必要があります。これは主にSQL上のシェルなので、新しい入札単価が追加されたときにどのようにしてRepoを出すことができるのか分かりません。私はそれについて考えるでしょう。 –

+0

私は明らかにあなたのレポの詳細は分かりませんが、件名は見たいものかもしれません:https://github.com/Froussios/Intro-To-RxJava/blob/master/Part%201%20- %20Getting%20Started/2.%20Key%20types.md#subject –

関連する問題