飞镖流:如何合并发出的物品,当他们经过彼此很近?

问题描述 投票:1回答:2

假设我有一个Stream<int>在不同的时间差,即5毫秒至1000毫秒之间发射整数。

当增量为<= 50ms的我想将它们合并。例如:

3, (delta:100) 5, (delta:27) 6, (delta:976) 3

我想消费:3,11(使用加法合并),3。

这可能吗?

dart stream
2个回答
1
投票

您可以从debounceBuffer包使用stream_transform流变压器。

stream
  .transform(debounceBuffer(const Duration(milliseconds: 50)))
  .map((list) => list.fold(0, (t, e) => t + e))

0
投票

你可以写,可以轻松地够自己:

Stream<int> debounce(
    Stream<int> source, Duration limit, int combine(int a, int b)) async* {
  int prev;
  var stopwatch;
  await for (var event in source) {
    if (stopwatch == null) {
      // First event.
      prev = event;
      stopwatch = Stopwatch()..start();
    } else {
      if (stopwatch.elapsed < limit) {
        prev = combine(prev, event);
      } else {
        yield prev;
        prev = event;
      }
      stopwatch.reset();
    }
  }
  // If any event, yield prev.
  if (stopwatch != null) yield prev;
}
© www.soinside.com 2019 - 2024. All rights reserved.