一段时间后使用RxJava发射项目

问题描述

我想在一段时间后使用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做出优雅的解决方案吗?我应该使用什么运算符。谢谢

解决方法

在我的durationSegment对象中,是发射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抱歉