Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 如何转换流<;T?>;流<;T>;_Dart - Fatal编程技术网

Dart 如何转换流<;T?>;流<;T>;

Dart 如何转换流<;T?>;流<;T>;,dart,Dart,我有以下函数,通过接受String返回int? int?转换(字符串s){ //一些实现 } 然后我有一个函数,它将流转换为流。我当前的实现如下所示 流转换流(流s){ 返回s .map((i)=>转换(i)) 。其中((i)=>i!=null) .map((i)=>i!); } 我觉得这条路不太好。有没有其他方法可以用来实现相同的行为?您的代码是正确的 与Iterable不同,Stream没有whereType方法。因此,您不能执行s.map(convert).whereType() 您可

我有以下函数,通过接受
String
返回
int?

int?转换(字符串s){
//一些实现
}
然后我有一个函数,它将
转换为
。我当前的实现如下所示

流转换流(流s){
返回s
.map((i)=>转换(i))
。其中((i)=>i!=null)
.map((i)=>i!);
}
我觉得这条路不太好。有没有其他方法可以用来实现相同的行为?

您的代码是正确的

Iterable
不同,
Stream
没有
whereType
方法。因此,您不能执行
s.map(convert).whereType()

您可以用
.cast()
替换
.map((i)=>i!)

或者,您可以使用
async*
方法:

Stream<int> convertStream(Stream<String> input) async* {
  await for (var s in input) {
    var i = convert(s);
    if (i != null) {
      yield i;
    }
  }
}

通过一些细微的更改,您可以将
convertStream
更改为
Stream
上的
whereType
扩展。Oneliner:
Stream.expand((int?v)=>v==null?[]:[v])
中提供了
whereType
stream.expand<int>((int? v) => v == null ? [] : [v])