【问题标题】:How to enumerate Stream results如何枚举 Stream 结果
【发布时间】:2021-02-27 18:54:53
【问题描述】:

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

'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];
}

我收到了为此创建一个类的建议。但我不想创建一个类来简单地将数字按事件发生的顺序分配给 Stream 事件。

有没有更好的方法来做到这一点?

【问题讨论】:

  • 你真的不应该使用List 作为一个元组,因为你会丢失类型信息。相反,为您的目的创建一个类并从中返回对象。

标签: dart stream


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 2017-03-22
    相关资源
    最近更新 更多