同じ正確なアイテムが最後のxミリ秒以内に放出された場合にのみ発光が発生しないようにしたいと思います。私はスロットルとデバウンスのオペレータを見てきましたが、私がここで私を助けることができるかどうかはわかりません。私が使用できる別の演算子がありますか、何とかそれらを合成できますか?同じ発光がミリ秒前に発生した場合の発光の防止
答えて
各項目のタイムスタンプとペアリングを行い、時間と平等の境界条件を確認できます。
randomSource
.timestamp()
.pairwise()
.where(pair => pair[0].timestamp - pair[1].timestamp < limit && pair[0].value === pair[1].value);
次に、.select(pair => pair[0].value)
を適用して元の商品を戻してください。ランダムな時間にわたり間隔1と5の間のランダムなアイテムを生成したソースで、C#での例作業
:
static IObservable<T[]> Pairwise<T>(this IObservable<T> source)
{
source = source.Publish().RefCount();
return source.Skip(1).Zip(source, (a, b) => new[] { a, b });
}
static void Main(string[] args)
{
var randomSource =
Observable.Defer(() => Observable.Timer(TimeSpan.FromSeconds(new Random().NextDouble() * 2))).Repeat().Publish().RefCount().Select(_ => new Random().Next(1, 5));
var limit = TimeSpan.FromSeconds(1);
var sameDebounce =
randomSource
.Timestamp()
.Pairwise()
.Where(pair => pair[0].Timestamp - pair[1].Timestamp < limit && pair[0].Value == pair[1].Value);
sameDebounce.Subscribe(c => Console.WriteLine("{0} {1}", c[0], c[1]));
Console.ReadLine();
}
出力:
[email protected]/7/2017 5:00:04 AM +00:00 [email protected]/7/2017 5:00:04 AM +00:00
[email protected]/7/2017 5:00:09 AM +00:00 [email protected]/7/2017 5:00:08 AM +00:00
[email protected]/7/2017 5:00:23 AM +00:00 [email protected]/7/2017 5:00:23 AM +00:00
[email protected]/7/2017 5:00:33 AM +00:00 [email protected]/7/2017 5:00:32 AM +00:00
あなたの質問は完全にシナリオを説明していないので次の放出値を最後に放出された値または最後に放出された値または他のものと比較する。 私は一般的な方法で解決策に到達します。
例はRxJavaです。
次のようなfilter()
オペレータとtimestamp()
を使用することができます。私はこのスニペットは、あなただけのfilter()
演算子であるあなた放出される値の比較ログインを変更する必要が助けることができると思います
ArrayList<String> list = new ArrayList<>();
final long[] timeOfSubscribe = {-1};
final long timeDuration = 2 * 1000; // 2 seconds
Observable.fromIterable(list)
.timestamp()
.filter(item -> item.time() > (timeDuration + timeOfSubscribe[0]) && item.value().equals("your last value"))
.doOnSubscribe(__ -> timeOfSubscribe[0] = Calendar.getInstance().getTimeInMillis())
.subscribe();
。最後に放出された値を探している場合は、doOnNext()
演算子(単純な場合)を使用して最後に放出された値を停止することができます。または、放出された値をリストとチェックに保存する必要があります。
私はそれが役に立ちそうです。
あなたは、本質的に、個々のアイテム
o
.groupByUntil(x => x, x => x, x => Observable.timer(1000))
.flatMap(grp => grp.first())
それは私がそれをやる方法です。 –
RxJSにはうまく見えます - RxJava2はgroupByUntil演算子を持っていないようです:) –
なぜrxjsとrx-javaの両方をリストアップしたのか分かりませんでした。 JavaにC#バージョンを移植することができます:https://github.com/Reactive-Extensions/Rx.NET/blob/83710cfa9395355af6eb908f96261ea632a49009/Rx.NET/Source/src/System.Reactive/Linq/Observable/GroupByUntil.cs – Brandon
- 1. 発光イベントグローバル
- 2. node.js用のJavascript発光テンプレートエンジン?
- 3. keyupイベントがangular2で発生した場合のデフォルトのクリックイベントを防止する
- 4. Androidカメラ2のフラッシュは、暗い場所では自動発光モードで発光しません。
- 5. 角度2発光ホバリングイベントは
- 6. Openstackパイクとceph発光 - InvalidArgumentError
- 7. ソケットがルート内で発光しない
- 8. 角度4イベントエミッターが発光しない
- 9. RxAndroid - BehaviorSubjectがonNextで発光しない
- 10. エラーが発生した場合に強制終了を防止する
- 11. 春5原子炉 - 発光項目ごとに1秒
- 12. NodeJSソケットIOはランダムに発光を停止しますか?
- 13. Node.jsアプリケーションはブラウザからの発光を受信しますが、ブラウザは発光しません
- 14. iPhone開発は、光線のアプリケーション
- 15. Node.jsにエラーが発生した場合、同じページに留まる
- 16. document.readystate == completeの場合、onloadが発生したときと同じですか?
- 17. エラーが発生した場合jboss 5.1.0
- 18. ResponseExceptionが発生した場合
- 19. エラーが発生した場合は
- 20. javax.xml.ws.soap.SOAPFaultExceptionが発生した場合
- 21. エラーが発生した場合(Haskell)
- 22. 発光イベントは同期的に間違っていますか?
- 23. py.test assertが発生する可能性があり、発生した場合は__
- 24. ソケットで発光させると、なぜイベントトリガーが発生しないのですか?
- 25. 2つの特定の値が同じ日に発生した場合の合計値
- 26. ロード時にミリ秒の遅延が発生する複雑なアイテムのリストビュー
- 27. 新しい値が同じ場合、DependencyPropertyはValueChangedを発生しません
- 28. SocketIOがエクスプレスルート内で発光しません
- 29. Android bluetoothadapterがACTION_DISCOVERY_FINISHEDを発光していません
- 30. (代わりにエラーのインスタンスの発光値)postcss-カスタムプロパティ
をデバウンスするgroupByUntilでこれを行うことができ、あなたはより多くの情報を提供することはできますか?たとえば、どのオブジェクトを使用しているか、アイテムの排出速度はどれくらいですか?あなたはどこからそれらのアイテムを放出しますか?それらのアイテムが1つずつ放出されるか、バッチで放出されることが重要ですか? –