java - Rx java将无限流分成组并对每个组单独进行去抖

标签 java rx-java reactive-programming

我有一个简单的类(class):

public class Event {
    String objectId;
}

以及一些向我的可观察对象发出事件的事件源。该源是无限的,可以多次发送具有相同 objectId 的事件。
因此,我想按 objectId 对值进行分组,然后对每个组进行反跳。
假设我有
E1-E1-E2-E1-E2-E2-E2...E2-E1-E100..
我想要实现:
E1
E2
..
E2
E1
E100
..
因此,具有相同 objectId 的事件在 1 秒内不会发出多次。

最佳答案

您可以接受您的描述“因此,我想按 objectId 对值进行分组,然后对每个组进行反跳。”并直接将其转换为运算符:

  1. “按 objectId 对值进行分组” -> Observable.groupBy
  2. “对每个组进行去抖” -> Observable.mapObservable.debounce
  3. 最后将其合并回单个流 -> Observable.merge

变成:

Observable.merge(
    <source>.groupBy(value -> value.objectId)
            .map(observable -> observable.debounce(1, TimeUnit.SECONDS))
)

关于java - Rx java将无限流分成组并对每个组单独进行去抖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43431501/

相关文章:

java - Docker Binding 与 testcontainer 的解析异常

java - RxJava 测试 Observable

android - 使用Android Clean Architecture处理来自API的错误和成功响应

java - appengine-web.xml - XML 错误验证

java.util.ConcurrentModificationException -- 执行 IO 操作时的错误(不是列表)

java - JPanel渐变背景

android - RxJava 和 Android : how to invalidate observable that use cache()?

javascript - 如何在 Bacon.js 中合并两个属性

java - 具有延迟可观察性的 SwitchMap

.net - Reactive Extensions 基于特定数量的并行处理