在这里插入图片描述

一、Stream转换操作符

Stream提供了丰富的转换操作符,可以对数据流进行处理。

原始Stream

map转换

filter过滤

expand展开

take限制

最终Stream

二、过滤奇数

void _processData() {
  setState(() {
    _filteredData.clear();
    _transformedData.clear();

    // 过滤偶数,保留奇数
    _controller.stream
        .take(1)
        .map((_) => _originalData)
        .expand((data) => data)
        .where((n) => n % 2 != 0)
        .listen((n) => _filteredData.add(n));
  });
}

三、转换为字符串

// 转换为字符串
_controller.stream
    .take(1)
    .map((_) => _originalData)
    .expand((data) => data)
    .map((n) => '数字: $n')
    .listen((s) => _transformedData.add(s));

四、操作符对比

操作符 功能 示例
map 转换每个值 .map((n) => n * 2)
where 过滤值 .where((n) => n > 0)
expand 展开列表 .expand((list) => list)
take 限制数量 .take(10)
skip 跳过值 .skip(5)

五、处理流程

过滤

转换

原始数据

generate产生Stream

map转换为列表

expand展开列表

分支处理

where奇数

map字符串

添加到过滤结果

添加到转换结果

显示数据

六、数据展示

数据列表 转换操作 过滤操作 Stream 界面 数据列表 转换操作 过滤操作 Stream 界面 生成并处理 where过滤 添加奇数 map转换 添加字符串 显示三列数据

七、性能优化

不同处理方式的性能对比(20条数据) 原始 过滤 转换 10 9 8 7 6 5 4 3 2 1 0 处理时间(ms)

要点

  • 使用take(1)限制Stream长度
  • 及时清除旧数据
  • 使用expand展开列表
  • 合理选择操作符

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐