首页 > 解决方案 > 如何在 RxJava 中以不同的间隔链接 observables?

问题描述

我看到很多关于Rx延迟事件的每次发射的帖子:如何使用 RxJS Observables 制作倒数计时器?,如何使用 RxJava 间隔运算符,在 Observable Items RxJava 之间添加延迟,为每个发出的列表项添加 RxJava 延迟等。

不过,我没有看到任何具有不同延迟的链接。

基本上,我有一个 Textview 和一个字母列表,我想:

代码实现可能看起来像这样(但我猜这doThing()是胡说八道Rxdelay()并不意味着这个):

Observable.fromArray(new String[]{"A", "B", "C", "D", "E"})
        .subscribeOn(Schedulers.newThread())
        .observeOn(AndroidSchedulers.mainThread())
        .delay(500L, TimeUnit.MILLISECONDS)
        .doThing((String i) -> {
            textView.setText("");
            Log.d("XXX", "MainActivity :: onCreate (110): letter="+ i);
        })
        .delay(1500L, TimeUnit.MILLISECONDS)
        .doThing((String i) -> {
            textView.setText(i);
            Log.d("XXX", "MainActivity :: onCreate (110): letter="+ i);
        });

我怎样才能用 Rx 实现这一点?

编辑:我可以使用来自rxjava 延迟的答案:如何获得从列表发出的每个项目的可变延迟?有一个字母列表,其中一个字母对两个是特殊的(可能是空的?),但它似乎过于复杂。

标签: androidrx-javadelayreactivex

解决方案


顺序A (1500ms) null (500ms) B (1500ms) null (500ms) C (500ms) null (1500ms)

textAnimationDisposable = Observable.fromArray("A", "B", "C")
        .concatMap(string ->
              Observable.merge(
                 Observable.just(string),
                 Observable.just("").delay(1500, TimeUnit.MILLISECONDS)
              )
              .concatWith(Observable.<String>empty().delay(500, TimeUnit.MILLISECONDS))
        )
        .observeOn(AndroidSchedulers.mainThread())
        .subscribeOn(Schedulers.newThread())
        .subscribe(string -> textView.setText(string));

您链接的最后一个解决方案对于分别控制每个项目的延迟非常有用。


推荐阅读