dart - 从地图流创建列表流
问题描述
我有一个项目需要我使用流。
我有一个带有以下代码的地图流:
Stream<Map<String,TextBlock>> get phoneNumberBlocks =>
visionMatch.map((MatchVisionTextRegex ourRegexDetection) {
final Map<String,TextBlock> list = <String,TextBlock>{};
for (MatchVisionTextData textData in ourRegexDetection.phone) {
list[textData.parsedText]=textData.textBlock;
}
return list;
}).asBroadcastStream();
现在我想创建另一个接收phoneNumberBlocks
映射流的流,并返回该映射的键列表的另一个流。
到目前为止,我有这个:
Stream<List<String>> get phoneNumbers =>
phoneNumberBlocks.map<String,TextBlock>((String s, TextBlock b) =>
s).asBroadcastStream();
这完全坏了,不起作用!:) 任何想法如何实现这一目标?
谢谢你
解决方案
您可以使用 a StreamTransformer
,因为它的目的是接收流,对其进行转换并返回一个新流。
所以给定Stream
一个Map<String,String>
:
StreamController<Map<String,String>> streamController = StreamController.broadcast();
Stream<Map<String,String>> get phoneNumberBlocks => streamController.stream;
您可以像这样创建一个新的:
Stream<List<String>> get phoneNumbers => phoneNumberBlocks.transform(StreamTransformer.fromHandlers(
handleData: (Map<String,String> data, sink) {
sink.add(data.keys.toList());
}
));
将StreamTransformer
接收来自地图的数据phoneNumberBlocks
并将其仅添加keys
到新的地图Stream
中List<String>
。
一个实际的例子:
void main() {
phoneNumbers.listen((s) => print(s));
streamController.sink.add({
'1': 'a',
'2': 'b',
'3': 'c',
});
}
安慰:
[1、2、3]
在这里查看它的实际应用。
推荐阅读
- c# - Ninject InRequestScope() 与 InThreadScope()
- gremlin - Gremlin 相关查询会扼杀性能
- ruby-on-rails - 在主模型的窗体中创建多个子模型
- html - 如何将 Python 字符串代码转换为 Flask Jinja 模板的 HTML?
- swift - iOS 13.x 中的重复/自动反转动画
- javascript - 使用 ScrollMagic 和 TimelineMax 控制 Lottie 动画
- reactjs - React 中的设计模式
- sql - 如何让 SQL 表以水平方式反映垂直记录
- java - 在Android(java)中以编程方式将ConstraintLayout中的TextView居中
- python - Python 3 中是否有一个标志来报告是否不需要强制转换