Rxjs Rx-如何应用于允许在一段时间后发出重复项的流distinctUntilChanged?

Rxjs Rx-如何应用于允许在一段时间后发出重复项的流distinctUntilChanged?,rxjs,rx-java,reactive-programming,Rxjs,Rx Java,Reactive Programming,所以,我必须对一个可观测对象实现一些链式的或者是一些定制的RxJava操作符,这将区分从可观测对象发出的项,直到它们发生变化,但只在一段短时间内,比如1秒,然后可以再次发出重复项 我需要的是一些distinctUntilChanged和throttle的嵌套组合 主要要求是: 必须毫不延迟地发射不同的物品 同一项目在给定时间段内不能发射两次 我找不到任何符合我要求的运营商,因此,我可能需要编写一些定制的Rx运营商,但我仍然不知道如何启动只需groupBy运营商即可。由于每个组$都与throttl

所以,我必须对一个可观测对象实现一些链式的或者是一些定制的RxJava操作符,这将区分从可观测对象发出的项,直到它们发生变化,但只在一段短时间内,比如1秒,然后可以再次发出重复项

我需要的是一些distinctUntilChanged和throttle的嵌套组合

主要要求是:

必须毫不延迟地发射不同的物品 同一项目在给定时间段内不能发射两次 我找不到任何符合我要求的运营商,因此,我可能需要编写一些定制的Rx运营商,但我仍然不知道如何启动

只需groupBy运营商即可。由于每个组$都与throttleTime连接,并且每个排放都通过该组$Observable,因此它将在1s内忽略所有后续排放:

source$
  .pipe(
    groupBy(item => item.whatever),
    mergeMap(group$ => group$.pipe(
      throttleTime(1000)
    )),
  )
  .subscribe(...);

因此,我发现,实施起来非常容易:

fun <T> Observable<T>.distinctUntil(time: Long): Observable<T> {
    return this
        .timestamp()
        .distinctUntilChanged { old, new ->
            new.value() == old.value() && new.time() - old.time() < time
        }
        .map { it.value() }
}

我不明白这些要求。你想做一秒钟的改变,然后让一切都过去吗?@akarnokd刚刚在下面发布了我自己的答案。过来看