0

我有一个订阅元素流的简单小部件。

每次收到一个新元素时,我还想获取前一个元素并决定其中哪个元素通过下游。

目前我正在使用map运算符来存储前一个元素并计算下一个元素,如下所示:

elements.map((e) {
 if (this.previous == null) {
  this.previous = e;
  return e;
 } 

 final next = merge(this.previous, e);

 this.previous = e;
 return next;
}).listen(...);

我怎样才能更好地做到这一点并避免拥有this.previous

4

2 回答 2

1

如果您使用rxdart 包,则有一个名为pairwise的扩展方法,根据文档:

成对发出第 n 个和第 n-1 个事件。在第二个事件到达之前,不会发出第一个事件。

然后你应该能够按照以下方式做一些事情:

elements.pairwise().map((pair) => merge(pair.first, pair.last)).listen(...);
于 2021-12-10T16:09:26.020 回答
0

这是一种可能性

void main() {
  List list = [12, 24, 48, 60];
  list.reduce((value, element) {
    print(value + element); // Push to another list maybe?
    return element;
  });
}

如果您正在使用流,请尝试此操作

void main() {
  var counterStream = Stream<int>.periodic(const Duration(seconds: 1), (x) => x)
       .reduce((previous, element) {
          print(previous + element); // Push to another stream maybe?
          return element;
  });
}
于 2021-12-10T17:36:16.453 回答