dart - 如何转换流流式传输
问题描述
我有以下函数将int?
通过接受返回String
。
int? convert(String s) {
// Some implementation
}
然后我有这个函数可以将 a 转换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!);
}
这种方式对我来说并不好看。有没有其他方法可以用来实现相同的行为?
解决方案
你的代码是正确的。
不像Iterable
,Stream
没有whereType
方法。所以你不能这样做s.map(convert).whereType<int>()
。
您可以替换.map<int>((i) => i!)
为.cast<int>()
。
或者,您可以使用以下async*
方法:
Stream<int> convertStream(Stream<String> input) async* {
await for (var s in input) {
var i = convert(s);
if (i != null) {
yield i;
}
}
}
编辑:正如@lrn 所建议的,您也可以使用expand
:
stream.expand<int>((int? v) => v == null ? [] : [v])
推荐阅读
- postgresql-10 - 撤消在另一个函数中调用的函数事务
- android - Android BottomNavigationBar 每个选项卡的唯一图标色调列表?
- mercurial - 如何从自定义挂钩中读取配置设置?
- java - 如何与加密的 SQS 队列交互?KMS 密钥访问不起作用
- python - 哪种文件处理方式更好:'r' + 'a' 或 'r+'?
- android - 可绘制的正确位置不正确
- tensorflow - pytorch 中 tf.nn.softmax_cross_entropy_with_logits 的等价物是什么?
- yocto - 带有 Yocto 和 GUI 的 Odroid XU4(未找到 gtk+3 错误 wayland-egl)
- node.js - SailsJS / Waterline:仅从关联中获取特定属性
- kotlin - Kotlin 静态库需要在 Windows 下链接到哪些其他库?