rxjava delay:如何从列表中发出的每个项目获得可变延迟?

abh*_*ker 6 java rx-java

我希望从可观察列表中发出的每个项目之间的自定义延迟作为项目本身的函数.假设我们有一个列表(项目,延迟):

[("item1", 2),("item2", 1),("item3", 2),("item4", 3),("item5", 2),("item6", 3)]
Run Code Online (Sandbox Code Playgroud)

我希望输出类似于:

0 seconds: 
1 seconds: 
item1
2 seconds: 
item2
3 seconds: 
4 seconds: 
item3
5 seconds: 
6 seconds: 
7 seconds: 
item4
8 seconds: 
9 seconds: 
item5
10 seconds: 
11 seconds: 
12 seconds: 
item6
Completed!
13 seconds: 
Run Code Online (Sandbox Code Playgroud)

我不知道如何通过延迟/计时器操作员来最好地完成此操作.通过延迟文档,但无法找到一个简单的方法.任何指针都会有所帮助.谢谢!

Joh*_*wUs 14

不需要任何花哨的东西.只需使用concatMapdelay运营商

jla.concatMap(s -> Observable.just(s).delay(s.delay, TimeUnit.SECONDS))           
  .subscribe(s1 -> System.out.println(s1.name + " just came..."), 
             e -> {}, 
             () -> System.out.println("Everybody came!")); 
Run Code Online (Sandbox Code Playgroud)


Cri*_*nGM 5

您可以尝试使用 .delay() http://reactivex.io/RxJava/javadoc/rx/Observable.html#delay(rx.functions.Func1) 的这种覆盖

似乎正是您所需要的

代码类似于:

yourObservable.delay((item) -> Observable.timer(item.getDelay(), TimeUnit.SECONDS))
Run Code Online (Sandbox Code Playgroud)