当前位置: 首页 > 面试题库 >

发射列表的每个项目的RxJava延迟

常业
2023-03-14
问题内容

我正在努力实现我认为在Rx中相当简单的东西。

我有一个项目列表,我想延迟每个项目的发出。

似乎Rx delay()运算符只是将所有项目的发射偏移指定的延迟,而不是每个单独的项目。

这是一些测试代码。它将列表中的项目分组。然后,每个组应在发出之前应用延迟。

Observable.range(1, 5)
    .groupBy(n -> n % 5)
    .flatMap(g -> g.toList())
    .delay(50, TimeUnit.MILLISECONDS)
    .doOnNext(item -> {
        System.out.println(System.currentTimeMillis() - timeNow);
        System.out.println(item);
        System.out.println(" ");
    }).toList().toBlocking().first();

结果是:

154ms
[5]

155ms
[2]

155ms
[1]

155ms
[3]

155ms
[4]

但是我希望看到的是这样的:

174ms
[5]

230ms
[2]

285ms
[1]

345ms
[3]

399ms
[4]

我究竟做错了什么?


问题答案:

一种方法是zip将可观察值与Interval可观察值结合起来以延迟输出。

Observable.zip(Observable.range(1, 5)
        .groupBy(n -> n % 5)
        .flatMap(g -> g.toList()),
    Observable.interval(50, TimeUnit.MILLISECONDS),
    (obs, timer) -> obs)
    .doOnNext(item -> {
      System.out.println(System.currentTimeMillis() - timeNow);
      System.out.println(item);
      System.out.println(" ");
    }).toList().toBlocking().first();


 类似资料:
  • 我有一个方法返回一个

  • 我试图通过将多个改型api调用链接在一起来创建一个可观察的api。这些步骤是: 使用api调用获取json对象列表 对于列表中的每个对象,进行另一个api调用以获取有关该项目的更多详细信息 将从这个新的详细对象中获取的数据写入磁盘上的文件(列表中的每个项目都会出现这种情况) 最后返回一个单独对象的可观察性,该对象要求为之前的每个对象创建一个文件 这是我到目前为止所拥有的: 请有人确认我使用了正确的

  • 我正在使用改造从REST服务获取数据。在接收json(对象列表)后,我想为列表上的每个位置获取位图。最好的方法是什么?我试图在改造后创建的可观察对象上使用地图/平面地图,但它不起作用(或者,可能是我做错了)。 改造接口方法: 使用方法: 当我试图使用平板地图()或地图()时,它总是返回一个列表,但我需要每个项目单独。 任何帮助都将不胜感激!

  • 我使用改型2,我正在学习RxJava。我从某处下载了一个项目列表。我想对每个项目进行api调用,并创建扩展项目的新列表。两个调用都返回一个可观察的。它看起来像这样: 详细服务: } 问题是get细节返回一个可观察的,我不能用它来构造扩展项。在rxJava链中,更改get细节调用以返回对象不起作用,我猜是因为它将结果返回给主线程。如何获取对象本身?我尝试了很多其他的方法,但到目前为止都没有成功。

  • 在RxJava for Android中,我希望以一个取决于项目本身的时间间隔发出项目:在Observable中,我从队列中提取一个项目,对其进行处理并发出它。根据项目的类型,我想调整下一个项目的发射时间(减慢或加快间隔)。 下面的代码是@a.bertucci在这里提出的,它使用Android上的RxJava以固定的时间间隔在UI中发出绘制对象,演示了如何以固定的时间间隔发出项目。 我现在的问题是

  • 问题内容: 我刚刚开始使用Java中的列表。我想知道推荐的修改列表中每个元素的方法是什么? 我已经可以通过以下两种方法来完成此任务,但是它们看起来都相当简单。有没有更好的方法可以在Java中完成此操作?是否推荐以下任何一种方法,或者两者都处于同一水平? 问题答案: 第二个版本会更好。在内部,它们最后是相同的,但是第二个实际上允许您修改列表,而第一个将引发ConcurrentModification