当前位置: 首页 > 知识库问答 >
问题:

带时间间隔的Rx(Reactive Extensions for Java)Zip运算符

晋弘义
2023-03-14
Observable<String> data = Observable.just("one", "two", "three", "four", "five");
    Observable.zip(data, Observable.interval(1, TimeUnit.SECONDS), (d, t) -> {
        return d + " " + t;
    }).toBlocking().forEach(System.out::println);

这是可行的,但当我删除将源代码转换为BlockingObservable的toBlocking()时,程序执行并结束时没有输出。

我通常查看大理石图来正确理解事情:http://reactivex.io/documentation/operators/zip.html

在最后一句中,它说:它只会发射出与可观察源发射出的项数一样多的项,而可观察源发射出的项数最少。

这是否意味着dataObservable在不到1秒的时间内发出所有项目,并在打印每个Observable的前两个项目之前结束?因为每一个可观察到的东西本身都是异步的?

我需要清楚地了解正在发生的事情,以及是否有其他方法来处理类似的案件。有人吗?

共有1个答案

梁建德
2023-03-14

observable.interval在封面下使用调度程序。它将从另一个线程发出。同时,主线程已经完成了所有的组成并将退出。您可能在main方法中有这段代码,这就是您的程序退出的原因。

在实际系统中,这不应该是一个问题(除非您的实际系统是一个包含此代码的main方法)。

在示例程序中,您可以通过从stdin读取一个字节来导致主线程阻塞。类似这样的事情:

Observable<String> data = Observable.just("one", "two", "three", "four", "five");
Observable.zip(data, Observable.interval(1, TimeUnit.SECONDS), (d, t) -> d + " " + t)
        .subscribe(System.out::println);

System.in.read();
 类似资料:
  • # interval(date) Alias for interval.floor(date). For example, d3.time.day(new Date()) returns midnight (12:00 AM) on the current day, in local time. # interval.floor(date) Rounds down the specified da

  • 本文向大家介绍详解C# TimeSpan 计算时间差(时间间隔),包括了详解C# TimeSpan 计算时间差(时间间隔)的使用技巧和注意事项,需要的朋友参考一下 TimeSpan 结构  表示一个时间间隔。 命名空间:System 程序集:mscorlib(在 mscorlib.dll 中) 说明: 1.DateTime值类型代表了一个从公元0001年1月1日0点0分0秒到公元9999年12月3

  • 我偶然发现了这个不错的教程https://github.com/manashmndl/DeadSimpleSpeechRecognizer其中数据是基于由文件夹分隔的样本进行训练的,所有mfcc都是一次计算的。 我正试图以不同的方式实现类似的目标。 基于此:https://librosa.github.io/librosa/generated/librosa.feature.mfcc.html l

  • 问题内容: 我有两次,开始时间和停止时间,格式为10:33:26(HH:MM:SS)。我需要两次之间的区别。我一直在浏览Python文档并在线搜索,我想这可能与datetime和/或time模块有关。我无法使其正常工作,并且仅在涉及约会时才继续寻找方法。 最终,我需要计算多个持续时间的平均值。我得到了工作上的时差,并将它们存储在列表中。我现在需要计算平均值。我正在使用正则表达式解析原始时间,然后进

  • 问题内容: 时间间隔后如何调用方法?例如,如果要在2秒钟后在屏幕上打印声明,其程序是什么? 问题答案: 答案是一起使用javax.swing.Timer和java.util.Timer: 显然,仅使用java.util.Timer可以达到2秒的打印间隔,但是如果要在一次打印后停止打印,那将很难。 另外,请勿在代码中混用线程,而无需线程即可! 希望这会有所帮助!