Rx java将无限流分成组并将每个组拆分分开

时间:2017-04-15 21:35:12

标签: java rx-java reactive-programming

我有一个简单的课程:

public class Event {
    String objectId;
}

一些事件源向我的observable发出事件。这个源是无限的,可以用相同的objectId发送几次事件 所以,我希望按objectId对值进行分组,然后对每个组进行去抖动 如果我有,那就说吧 E1-E1-E2-E1-E2-E2-E2...E2-E1-E100..
我想实现:
E1
E2
..
E2
E1
E100
..
因此,具有相同objectId的事件在1s内不会多次发出。

1 个答案:

答案 0 :(得分:3)

你可以采用你的描述"所以,我想通过objectId对值进行分组,然后去抖动每个组。"并直接将其转换为运营商:

  1. "按objectId"分组值 - > Observable.groupBy
  2. "去除每个群体" - > Observable.mapObservable.debounce
  3. 最后将其合并回单个流 - > Observable.merge
  4. 转入:

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