Rx java RxJava结合观察值并与以前的值进行比较

Rx java RxJava结合观察值并与以前的值进行比较,rx-java,Rx Java,我试图找出最好的方法,以顺序组合不同类型的观测值,然后比较结果。看看zip和CombineTest,我觉得它们不合适。我怎样才能做到以下几点 @Test public void shouldInsertRecord(){ BidsEntity bid = new BidsEntity(/* omitted */); Observable<Integer> count1 = bidsRepository.getBid(bid.getUs

我试图找出最好的方法,以顺序组合不同类型的观测值,然后比较结果。看看zip和CombineTest,我觉得它们不合适。我怎样才能做到以下几点

@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 

    }
@测试
公共void shouldInsertRecord(){
投标价=新的投标价(/*省略*/);
Observable count1=bidsRepository.getBid(bid.getUserId(),bid.getListingId()).count();
可观察插入=投标书替代。插入投标书(投标书);
Observable count2=bidsRepository.getBid(bid.getUserId(),bid.getListingId()).count();
//按顺序运行count1、运行insert、运行count2
//断言count2大于count1
}
不连续(也称为阻塞)是一种反应点

看看你的例子,我认为有一个单一的可观察的,每当一个出价被插入时就会发出值是合理的。然后你订阅这个可观察对象,并在一个观察者中对信息做任何你想做的事情


您已经有了一个看起来适合它的设置。Make
bidsRepository.getBid(…)
返回每当添加新的Bid时发出的可观察值,并用单个观察者替换
count
变量。

您的代码有很多不相关的内容。也不清楚组合的结果是什么顺序。相反,您可以简单地提供输入序列示例和预期的组合输出序列。Hi@yurgis,我不确定什么是不相关的-我正在尝试执行三个操作,并比较操作1和操作3的结果。好的,我刚刚注意到您似乎在运行单元测试,而不是生产代码。在这种情况下,您只需将toblock().singleOrDefault()应用于所有3个观测值。在测试代码中使用阻塞是完全正确的。另一个选项是在异步调用之前使用CountDownLatch设置为3,在onNext中为所有3个可观察对象调用countDown,并捕获AtomicIntegers和AtomicBoolean中的值。在异步调用之后,让latch.await()阻塞,直到所有值都到达原子变量。非阻塞是关键,这是正确的,但是必须有某种方法来保证这样的测试的顺序。我不知道如何才能使回购协议在新的出价被添加时发出,因为这主要是一个基于sql的shell。我会考虑的。我显然不知道你回购协议的具体内容,但你可能需要研究一些问题: