I want to have custom delays between each item emitted from an observable list as a function of the items themselves. Let's say we have a list as (item, delay):
[("item1", 2),("item2", 1),("item3", 2),("item4", 3),("item5", 2),("item6", 3)]
I want output to be something like:
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:
I am not sure how to best accomplish this with delay/timer operators. Went through delay documentation but couldn't figure out a straightforward way. Any pointers would be helpful. Thanks!
I might have a possible solution as below. Though I feel like there can be a better way to implement it, but this works for now. Do suggest alternatives/improvements if you see ways to make this better:
The output it produces:
You can also make user of
Timer
operator Have a look at thisIn order to delay a particular step you can use zip and combine that every item emitted in your first Observable.from go with an interval of X time.
This will print
More practicle examples here https://github.com/politrons/reactive
No need for anything fancy. Just use
concatMap
anddelay
operatorsYou may try to use this override of .delay() http://reactivex.io/RxJava/javadoc/rx/Observable.html#delay(rx.functions.Func1)
It seems exactly what you need
The code would be something like: