Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在特定时间后调用onNext后发出值_Java_Rx Java - Fatal编程技术网

Java 在特定时间后调用onNext后发出值

Java 在特定时间后调用onNext后发出值,java,rx-java,Java,Rx Java,我想在调用onNext 10秒后发出一个随机值。因此,12345将调用onNext,10秒后,应调用onNext以获取随机数。使用RxJava实现这一点的最佳方法是什么?提前谢谢 Observable.create(subscriber -> { subscriber.onNext(12345); }).subscribeOn(...) .observeOn(...) .subscribe(new Subscriber<Long>(){ @Override

我想在调用onNext 10秒后发出一个随机值。因此,12345将调用onNext,10秒后,应调用onNext以获取随机数。使用RxJava实现这一点的最佳方法是什么?提前谢谢

Observable.create(subscriber -> {
    subscriber.onNext(12345);
}).subscribeOn(...)
.observeOn(...)
.subscribe(new Subscriber<Long>(){
    @Override
    public void onNext(Long aLong) {
        //Do Something
    }
})
Observable.create(订户->{
认购人.onNext(12345);;
}).subscribeOn(…)
.观察(…)
.subscribe(新订户(){
@凌驾
下一页的公共空白(长期){
//做点什么
}
})

如果您立即发出“12345”值,那么解决方案就微不足道了。只需将此可观察对象与
计时器
合并,就可以得到这种行为。但是,我将假设您传递给
create
的OnSubscribe方法中的逻辑正在做一些工作,并且一旦准备就绪(即网络请求),就会发出值。在这种情况下,您需要同时利用
flatMap
merge
操作符。像这样的东西就足够了

Observable.create(subscriber -> {
    subscriber.onNext(12345);
})
  .flatMap(value -> Observable.just(value)
        .mergeWith(Observable.timer(10, TimeUnits.SECONDS).map(/* define your "random" value here */))
  )
  .subscribeOn(...)
  .observeOn(...)
  .subscribe(new Subscriber<Long>(){
      @Override
      public void onNext(Long aLong) {
        //Do Something
      }
  })
Observable.create(订户->{
认购人.onNext(12345);;
})
.flatMap(值->可观察的.just(值)
.mergeWith(Observable.timer(10,TimeUnits.SECONDS).map(/*在此处定义“随机”值*/))
)
.subscribeOn(…)
.观察(…)
.subscribe(新订户(){
@凌驾
下一页的公共空白(长期){
//做点什么
}
})
它会把你的值转换成可观察的值,它会立即发出这个值,并启动一个计时器10秒以发出其他东西


注意:请注意,这将带走你观察到的每一项发射,并为每一项产生延迟的第二次响应。因此,如果您计划从源observable发出多个值,您需要考虑这一点。

您可以将此逻辑放在subscriber->{}方法中。计时器之类的东西可以完成这项工作。这是绝对的选择,但我不认为RxJava是用来处理开箱即用的复杂情况的。在一个复杂的情况下,用纯Java编写如何发送数据的逻辑是一个好主意。难道没有运算符或类似的东西吗?这种情况可能非常特殊,但可能有人有一个好主意,所以这是一个特别糟糕的建议。使用RxJava的主要原因之一是利用其将复杂用例转换为简单流组合的能力。谢谢。这是一个完美的解决方案。