Java Stream 流笔记

打印 上一主题 下一主题

主题 843|帖子 843|积分 2529

Java Stream 流笔记

目次


  • Stream 流是什么
  • 常用 API 及利用
  • 与传统 API 对比
  • 总结

1. Stream 流是什么

Stream 是 Java 8 引入的用于处理集合数据的抽象 API,特点:


  • 声明式编程:关注"做什么"而非"怎么做"
  • 链式操作:支持流水线式操作组合
  • 并行处理:内置并行处理本领
  • 不存储数据:仅对数据源进行计算
  • 不可复用:每个流只能被消耗一次
  1. // 示例:创建流
  2. List<String> list = Arrays.asList("a", "b", "c");
  3. Stream<String> stream = list.stream();  // 顺序流
  4. Stream<String> parallelStream = list.parallelStream();  // 并行流
复制代码
2. 常用 API 及利用

2.1 核心操作分类

操作范例方法示例特点中心操作filter(), map(), sorted()惰性求值,返回新Stream终端操作forEach(), collect(), count()触发实际计算,流不可复用 2.2 常用 API 示例

过滤(filter)

  1. List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
  2. List<Integer> evenNumbers = numbers.stream()
  3.     .filter(n -> n % 2 == 0)  // 中间操作:过滤偶数
  4.     .collect(Collectors.toList());  // 终端操作:收集结果
  5. // 结果:[2, 4]   
复制代码
映射(map)

  1. List<String> words = Arrays.asList("Java", "Stream");
  2. List<Integer> lengths = words.stream()
  3.     .map(String::length)  // 中间操作:转换为字符串长度
  4.     .collect(Collectors.toList());
  5. // 结果:[4, 6]
复制代码
排序(sorted)

  1. List<String> names = Arrays.asList("Bob", "Alice", "David");
  2. List<String> sortedNames = names.stream()
  3.     .sorted()  // 自然排序
  4.     .collect(Collectors.toList());
  5. // 结果:[Alice, Bob, David]
  6. // 自定义排序
  7. List<String> customSorted = names.stream()
  8.     .sorted((a, b) -> b.compareTo(a))  // 倒序
  9.     .collect(Collectors.toList());
  10. // 结果:[David, Bob, Alice]
复制代码

3. 与传统 API 对比

3.1 排序功能对比

集合工具类(Collections.sort)

  1. List<String> list = new ArrayList<>(Arrays.asList("c", "b", "a"));
  2. Collections.sort(list);  // 直接修改原集合
  3. // 优点:内存占用小
  4. // 缺点:破坏原数据,难以组合复杂操作
复制代码
Stream 实现排序

  1. List<String> original = Arrays.asList("c", "b", "a");
  2. List<String> sorted = original.stream()
  3.     .sorted()
  4.     .collect(Collectors.toList());  // 生成新集合
  5. // 优点:保持原数据不变,可组合其他操作
  6. // 缺点:需要额外内存存储新集合  
复制代码
3.2 综合对比

特性Stream API传统集合操作代码可读性⭐⭐⭐⭐(声明式)⭐⭐(下令式)并行处理内置 parallel() 方法需手动实现多线程内存服从较高内存占用(天生新集合)较低内存占用操作组合本领支持链式操作需分步实现数据修改不修改源数据可能修改源数据适用场景复杂数据处理流水线简单操作/性能敏感场景
4. 总结

优势:


  • 声明式编程:提高代码可读性和维护性
  • 函数式组合:轻松实现复杂数据处理流水线
  • 并行优化:简单启用 parallel() 即可利用多核
  • 耽误执行:优化计算过程,避免不须要的操作
留意事项:


  • 性能敏感场景:简单操作可能不如传统方式高效
  • 状态问题:避免在 lambda 中修改外部状态
  • 资源管理:留意流的自动关闭特性(如文件流)
选择发起:



  • 需要组合多个操作时优先利用 Stream
  • 处理大数据集时考虑利用并行流
  • 简单单步操作可保留传统方式
  • 需要保持原始数据不变时利用 Stream
  1. // 最佳实践示例:组合操作
  2. List<String> result = dataList.stream()
  3.     .filter(item -> item.startsWith("A"))  // 过滤
  4.     .map(String::toUpperCase)             // 转换
  5.     .sorted(Comparator.reverseOrder())    // 排序
  6.     .limit(10)                            // 限制数量
  7.     .collect(Collectors.toList());        // 收集结果
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

温锦文欧普厨电及净水器总代理

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表