问题描述
我想在一段时间后使用RxJava发出项目。 我提供了一些伪代码以明确说明我想要的东西
class Segment(
val startTime: Int,val duration: Int
)
fun main() {
val segments = listof(
Segment(0,1500),Segment(1500,3000),Segment(4500,450)
)
Observable.fromIterable(segments)
.period { segment ->
waitFor = segment.duration // here we set a delay for the next item
}
.subscribe { segment ->
doSomeWork(segment.startTime) // first item should be emmited immediatly
}
}
您认为我可以使用Rx做出优雅的解决方案吗?我应该使用什么运算符。谢谢
解决方法
在我的duration
版Segment
对象中,是发射startTime
之前要等待的时间(不是等待下一个项目的时间)。
我已经使用startWith
发出了第一项,没有任何延迟。
concat
等待每个可观察对象都已完成,然后再订阅下一个可观察对象,以维持顺序。
@Test
public void so_delay() {
List<Observable<Integer>> segments = Stream.of(
new Segment(3,1500),new Segment(4,3000),new Segment(5,4500)
)
.map(s -> Observable.just(s.startTime).delay(s.duration,TimeUnit.MILLISECONDS))
.collect(Collectors.toList());
Observable.concat(segments)
.startWith(0)
.blockingSubscribe(e -> System.out.println("------> :" + e));
}
为此,我使用的是Java抱歉