RxJavaで時間軸にまつわる実験をするのに便利なコードを書いてみた。初期値としてミリ秒単位で数字を並べると、その数字の後にそのミリ秒分の delay が入るという物。
Observable
.just(100, 200, 100, 300, 100)
.concatMap(ms -> Observable.just(ms).delay(ms, TimeUnit.MILLISECONDS))
.timeInterval()
.toBlocking()
.forEach(n -> System.out.println(n));
ちなみにtoBlocking()を入れているのは、RxJavaではObservable.interval() や Observable#delay を入れると、ストリームが途中の状態でもメインスレッドが終了してしまうため。
なので、toBlocking()を入れなくても Thread.sleep() を入れるなどの手段でも適切に実行することはできる。