RxJava去Bounce运算符依赖于消息

RxJava去Bounce运算符依赖于消息,java,rx-java,reactive-programming,rx-java2,Java,Rx Java,Reactive Programming,Rx Java2,我学习RxJava并试图理解如何实现非标准的反应式“debouce”逻辑。依赖于消息新的操作员必须延迟某种消息,或者如果另一种类型的消息从observable到达,则跳过它 请帮助我编写此逻辑。这需要一个非平凡的运算符组合: 仅限公共静态可观测转换器去BounceOnly( RxJava 1.2.10的谓词Kotlin代码: val sequence = listOf( Pair(0, "A"), // delay Pair(3, "B"),

我学习RxJava并试图理解如何实现非标准的反应式“debouce”逻辑。依赖于消息新的操作员必须延迟某种消息,或者如果另一种类型的消息从observable到达,则跳过它


请帮助我编写此逻辑。

这需要一个非平凡的运算符组合:

仅限公共静态可观测转换器去BounceOnly(

RxJava 1.2.10的谓词Kotlin代码:

val sequence = listOf(
            Pair(0, "A"),  // delay
            Pair(3, "B"),  // immediately
            Pair(4, "C"),  // immediately
            Pair(5, "A"),  // skip by next A
            Pair(6, "A"),  // delay
            Pair(9, "A"),  // skip by next B
            Pair(10, "B"), // immediately
            Pair(11, "C")  // immediately
    )

    val startTime = LocalDateTime.now()
    Observable
            .from(sequence)
            .flatMap { tm ->
                Observable.just(tm.second)
                        .delay(tm.first.toLong(), TimeUnit.SECONDS)
            }
            .compose { o ->
                o.publish { f ->
                    f.concatMap { v ->
                        if (v == "A")
                            Observable.just(v).delay(2, TimeUnit.SECONDS).takeUntil(f)
                        else
                            Observable.just(v)
                    }
                }
            }
            .toBlocking()
            .subscribe {
                        val currentTime = LocalDateTime.now()
                        val sec = currentTime.toEpochSecond(ZoneOffset.UTC) - startTime.toEpochSecond(ZoneOffset.UTC)
                        println("$sec - $it")
                    }