Java 8 Stream流:从入门到“真香”

举报
Brian-Tony 发表于 2026/10/27 09:03:48 2026/10/27
【摘要】 Java 8 Stream流:从入门到“真香”Java 8 引入的 Stream API 可以说是 Java 语言的一次重大升级,它让我们处理集合数据的方式从“命令式”转向了“声明式”。简单说,就是你不再需要写一堆 for 循环和 if 判断,而是像流水线一样,把数据“流”过一系列操作,最终得到想要的结果。 什么是 Stream?Stream 不是数据结构,它不存储数据,而是对数据源(如集...

Java 8 Stream流:从入门到“真香”

Java 8 引入的 Stream API 可以说是 Java 语言的一次重大升级,它让我们处理集合数据的方式从“命令式”转向了“声明式”。简单说,就是你不再需要写一堆 for 循环和 if 判断,而是像流水线一样,把数据“流”过一系列操作,最终得到想要的结果。

什么是 Stream?

Stream 不是数据结构,它不存储数据,而是对数据源(如集合、数组)进行一系列管道化处理。它有三大特征:

  • 不存储数据:Stream 只是数据的“搬运工”。
  • 不改变数据源:Stream 操作不会修改原始集合,而是返回一个新的结果。
  • 惰性求值:中间操作(如 filter、map)不会立即执行,只有遇到终端操作(如 collect、forEach)时才会真正开始计算。

常用操作一览

1. 创建 Stream

// 从集合创建
List<String> list = Arrays.asList("Java", "Python", "Go");
Stream<String> stream = list.stream();

// 从数组创建
int[] arr = {1, 2, 3, 4, 5};
IntStream intStream = Arrays.stream(arr);

2. 中间操作(返回 Stream,可链式调用)

  • filter:过滤,保留满足条件的元素
  • map:映射,将每个元素转换为另一个值
  • sorted:排序
  • distinct:去重
  • limit:截取前 N 个元素
List<String> result = list.stream()
    .filter(s -> s.length() > 3)
    .map(String::toUpperCase)
    .sorted()
    .collect(Collectors.toList());
// 结果: ["GO", "JAVA", "PYTHON"]

3. 终端操作(触发计算,返回结果)

  • forEach:遍历
  • collect:收集为集合
  • count:计数
  • reduce:归约
  • anyMatch / allMatch:匹配判断
long count = list.stream()
    .filter(s -> s.startsWith("J"))
    .count();
// 结果: 1

实战小例子

假设有一个用户列表,要找出所有年龄大于 18 的用户名,并按字母排序:

List<String> names = users.stream()
    .filter(u -> u.getAge() > 18)
    .map(User::getName)
    .sorted()
    .collect(Collectors.toList());

一行代码搞定,是不是比写 for 循环清爽多了?

注意事项

  • Stream 只能消费一次,用完后不能复用。
  • 并行流(parallelStream)虽然能利用多核提升性能,但要注意线程安全问题,且并非所有场景都适合。
  • 不要过度使用,简单的遍历用 for 循环反而更直观。

总结

Stream 的核心思想就是 “声明式编程” ——你告诉程序“我要什么”,而不是“怎么做”。熟练掌握 filter、map、collect 这三个操作,基本就能应对 80% 的日常需求了。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。