2017-09-25 18 views
0

スロットルルール:スロットルRxJava

  1. 最近の100msに放出他の項目がない場合、次の項目は、1000ミリ秒のタイムアウトまたはバッファサイズまで、入ってくるアイテムをバッファしない場合は、直ちに
  2. を加入者に配信することになります500に達した後、バッファリングされたアイテムリストを加入者に配信する

RxJavaはこれを達成できますか?

答えて

0

conflate()と呼ばれる(理論的な)演算子がありますが、これにはいくつかのことがあります。私はいくつかの実装を見てきました。最近はthis discussion threadです。

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

あなたはこれを自分でテストする必要があります:あなたは、次を使用して、それを適用する

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))); 
} 

:valeriyoの答えから適応、我々は次の演算子を開発します。私はあなたの仮定のいくつかで明確ではない。

関連する問題