RxJava去Bounce运算符依赖于消息
我学习RxJava并试图理解如何实现非标准的反应式“debouce”逻辑。依赖于消息新的操作员必须延迟某种消息,或者如果另一种类型的消息从observable到达,则跳过它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"),
请帮助我编写此逻辑。这需要一个非平凡的运算符组合:
仅限公共静态可观测转换器去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")
}