2017-09-25 84 views
0

節流規則:節流在RxJava

  1. 如果在最近的100毫秒發出沒有其他項目,下一個項目將被交付立即訂戶
  2. 如果沒有,緩衝傳入的項目,直到1000毫秒超時或緩衝區大小達到500,然後提供緩衝項目清單給用戶

RxJava可以實現這個嗎?

回答

0

有一個(理論)運算符叫conflate(),它有一些這樣做。我看到了幾個實現,最近在this discussion thread。從valeriyo的答案適應,我們開展以下操作:

public static <T> Transformer<T, List<T>> adaptiveSample(long time, TimeUnit unit, Scheduler scheduler) { 
    return source -> source 
     .publish(shared -> concat(
      shared.take(1).toList(), 
      shared.buffer(500, time, unit, scheduler)) 
      .repeatWhen(a -> shared.debounce(time, unit, scheduler))); 
} 

你會然後使用應用它的以下內容:

observable 
    .compose(adaptiveSample(1000, TimeUnit.MILLISECONDS, scheduler)) 
    .subscribe(listOfSamples -> doStuff(listOfSamples)); 

您將要測試這個自己。我不清楚你的一些假設。