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])