我有下面的函数,它将通过接受String
返回int?
。
int? convert(String s) {
// Some implementation
}
然后我有了这个函数,它将把一个Stream<String>
转换成Stream<int>
。
Stream<int> convertStream(Stream<String> s) {
return s
.map<int?>((i) => convert(i))
.where((i) => i!=null)
.map<int>((i) => i!);
}
我觉得这种方法不太好,有没有其他方法可以达到同样的效果?
2条答案
按热度按时间yrdbyhpb1#
您的代码是正确的。
不像
Iterable
,Stream
没有whereType
方法,所以你不能做s.map(convert).whereType<int>()
。您可以将
.map<int>((i) => i!)
替换为.cast<int>()
。或者,您可以使用
async*
方法:编辑:正如@lrn所建议的,您也可以使用
expand
:lf5gs5x22#
或者,您可以在stream_transform Dart dev包中使用
whereType<T>()
,如下所示: