如何枚举 Stream 结果

How to enumerate Stream results

我有一个 Stream,它产生这样的字符串:

'apple'
'orange'
'banana'

当我收听 Stream 时,我想按照产生的顺序从 1 到 n(Stream 长度)为结果分配数字,如下所示:

1: 'apple'
2: 'orange'
3: 'banana'

最好的方法是什么?


因为没有像 Python 中那样的 enumerate() 函数,到目前为止我的尝试非常糟糕: 内部流定义

int n = 0
await for (var nextString in originStream) {
  ++n;
  yield [n, nextString];
}

调用流时

myStream.transform(enumerateFunc)

List enumerateFunc(String myStr){
  return [n, myStr];
}

有人建议我为此创建一个 class。但我不想创建一个 class 来简单地按照事件发生的顺序将数字分配给 Stream 事件。

有更好的方法吗?

正如@julemand101 所建议的,一个非常可行的选择是为此目的创建一个 class 并生成 class 而不是 List:

Stream<String> fruits() async* {
  int n = 1;
  await for (final String fruit in fruitChannel) {
    yield Enumerated(n, fruit);
    n++;
  }
}