java - rxjava2 中的运算符延迟

标签 java android rx-java rx-java2

我是 rxjava2 的新手。当我阅读有关它的书时,我有一些我不理解的关于运算符延迟的内容。

We can postpone emissions using the delay() operator. It will hold any received emissions and delay each one for the specified time period. If we wanted to delay emissions by three seconds, we could do it like this:

 public static void main(String[] args) {

    Observable.just("Alpha", "Beta", "Gamma" ,"Delta",
            "Epsilon")
            .delay(3000, TimeUnit.SECONDS)
            .subscribe(s -> System.out.println("Received: " + s));

    sleep(3000);
}

public static void sleep(long millis) {
    try {
        Thread.sleep(millis);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

}

上述代码 fragment 的输出如下: 测试版 Α Gamma 三角洲 小量

我认为输出只是“Alpha”,因为他们说

Because delay() operates on a different scheduler (such as Observable.interval()), we need to leverage a sleep() method to keep the application alive long enough to see this happen. Each emission will be delayed by three seconds

延迟 3 秒,我认为有一个发射为“Alpha”,但它发射了可观察到的所有发射。

最佳答案

这就是你想要的吗?

val source1 = Observable.just("Alpha", "Beta", "Gamma", "Delta", "Epsilon")

val source2 = Observable.interval(3000, TimeUnit.MILLISECONDS)

val observable = Observable.zip(source1, source2, object : BiFunction<String, Long, Any> {
    override fun apply(t1: String, t2: Long): Any {
        Log.d("Sometag", "Received $t1")
        return "Something"
    }
}).subscribe()

输出

2019-02-21 13:40:15.502  D/Sometag: Received Alpha
2019-02-21 13:40:18.502  D/Sometag: Received Beta
2019-02-21 13:40:21.502  D/Sometag: Received Gamma
2019-02-21 13:40:24.502  D/Sometag: Received Delta
2019-02-21 13:40:27.502  D/Sometag: Received Epsilon

关于java - rxjava2 中的运算符延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54802759/

相关文章:

java - 实现 java.lang.reflect.Proxy 的注释背后的基本原理是什么?

android - Flutter - 获取实际的 Android 设备名称

java - RXJava中使用Actions订阅时如何处理异常

java - 一般套接字问题 - 将 C++ 结构从 Java 转移到 C++

java - 从独立的 Java 客户端以编程方式创建 WebLogic 用户

android - 等到 GPS 启用后再获取 FusedLocationAPI 中的纬度和经度值

android - 在日历中设置时间 (android)

java - RxJava 过滤并发出其他项目

android - RxJava android 链接请求

java - 如何在 Gradle 中运行 JUnit 5 和 JUnit 4 测试套件?