微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决一段时间后使用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抱歉

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。