欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 培训 > 【Java Stream API详解与使用】

【Java Stream API详解与使用】

2025/10/20 23:51:20 来源:https://blog.csdn.net/qq_42603590/article/details/146374839  浏览:    关键词:【Java Stream API详解与使用】

系列文章目录

JAVA


文章目录

  • 系列文章目录
  • 👉前言
  • 👉一、Stream API 核心概念
  • 👉二、Stream 创建方式
  • 👉三、中间操作(Intermediate Operations)
  • 👉四、终止操作(Terminal Operations)
  • 👉五、并行流与性能优化
  • 👉六、应用场景
  • 👉壁纸分享
  • 👉总结


👉前言

Java Stream API 是Java 8中引入的一项功能,它允许程序员以声明式方式处理数据集合。通过Stream API,可以对数据执行复杂的查询操作,而不必编写冗余的代码。Stream 不是数据结构,它更像是一个高级版本的Iterator。单次使用,数据只能遍历一次,遍历过程中你可以对数据进行过滤、排序、聚合等操作。
博客将会介绍Java Stream API详解与使用。
希望这篇博客对Unity的开发者有所帮助。
大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。
欢迎点赞评论哦.下面就让我们进入正文吧 !


提示:以下是本篇文章正文内容,下面案例可供参考

👉一、Stream API 核心概念

  1. 什么是Stream?

流式数据处理:对数据集合进行声明式、链式操作(类似SQL语句)

不存储数据:仅对源数据进行计算处理,不修改原始数据源

延迟执行:中间操作不会立即执行,直到遇到终止操作

2.与集合的区别:

// 传统集合操作(外部迭代)
for (User user : users) {if (user.getAge() > 18) {System.out.println(user.getName());}
}// Stream操作(内部迭代)
users.stream().filter(user -> user.getAge() > 18).map(User::getName).forEach(System.out::println);

👉二、Stream 创建方式

1.集合创建

	list.stream() / list.parallelStream()

2.数组转换

Arrays.stream(array)

3.直接创建

Stream.of("a", "b", "c")

4.生成器方法

Stream.iterate(0, n -> n+2)Stream.generate(Math::random)

5.基本类型流

IntStream.range(1, 5)

👉三、中间操作(Intermediate Operations)

1.筛选与切片

// 过滤年龄>18的用户
.filter(user -> user.getAge() > 18) // 去重(依赖equals方法)
.distinct() // 取前5个
.limit(5) // 跳过前3个
.skip(3)

2.映射操作

// 提取用户姓名
.map(User::getName) // 扁平化处理(合并嵌套集合)
.flatMap(list -> list.stream()) // 记录中间值(调试用)
.peek(System.out::println) 

3.排序

// 自然排序
.sorted() // 自定义排序
.sorted(Comparator.comparing(User::getAge)) 

👉四、终止操作(Terminal Operations)

1.遍历与收集

// 遍历输出
.forEach(System.out::println) // 转换为List
.collect(Collectors.toList()) // 拼接字符串
.collect(Collectors.joining(", ")) // 分组(按年龄分组)
.collect(Collectors.groupingBy(User::getAge)) // 分区(年龄是否>18)
.collect(Collectors.partitioningBy(u -> u.getAge() > 18))

2.匹配与查找

// 是否存在成年人?
.anyMatch(u -> u.getAge() >= 18) // 查找第一个元素
.findFirst() // 查找任意元素(并行流优化)
.findAny() 

3.归约统计

// 计算总年龄
.mapToInt(User::getAge).sum() // 求最大值
.max(Comparator.naturalOrder()) // 自定义归约(累加器)
.reduce(0, Integer::sum) 

👉五、并行流与性能优化

// 转换为并行流
List<User> result = users.parallelStream().filter(u -> u.getAge() > 18).collect(Collectors.toList());// 注意事项:
// 1. 确保操作线程安全
// 2. 数据量小时可能降低性能
// 3. 避免共享可变状态

👉六、应用场景

1.多层数据转换

List<String> emails = orders.stream().filter(o -> o.getTotal() > 100).map(Order::getCustomer).flatMap(customer -> customer.getEmails().stream()).distinct().collect(Collectors.toList());

2.分组统计

Map<String, Long> countByCity = users.stream().collect(Collectors.groupingBy(User::getCity, Collectors.counting()));

3.数值统计

IntSummaryStatistics stats = products.stream().mapToInt(Product::getStock).summaryStatistics();// 输出:max=50, min=10, avg=30, sum=300

4.注意事项

  1. 流不可复用:终止操作后流自动关闭
  2. 避免副作用:不要在操作中修改外部变量
  3. 资源管理:IO流需手动关闭(如Files.lines())
  4. 空值处理:使用Optional处理可能为null的结果
  5. 链式操作顺序优化:先filter再sorted,减少排序数据量
  6. 方法引用优化:User::getName 比 u -> u.getName() 更简洁
  7. 避免复杂Lambda:超过3行的Lambda建议提取为方法

Java Stream API 是一个功能强大的工具,适用于处理集合和数据流。它提供了一种简洁而高效的方法来操作数据,尤其是在处理大量数据时。这个API优化了数据处理逻辑,使开发者能够以更少的代码执行复杂的数据转换和聚合操作。利用Java Stream API,可以轻松实现数据过滤、排序、转换及汇总,极大地提升了代码的可读性和可维护性。同时,Stream API 的函数式编程特性有助于减少错误和侧效应,使得并发程序的编写更为安全。通过使用Java Stream API,开发者可以写出更简洁、更高效、更易于维护的代码,同时享受到函数式编程带来的好处。

请添加图片描述

👉壁纸分享

在这里插入图片描述

👉总结

本次总结的就是Java Stream API详解与使用, 有需要会继续增加功能
如能帮助到你,就帮忙点个赞吧,三连更好哦,谢谢
你的点赞就是对博主的支持,有问题记得留言评论哦!
不定时更新Unity开发技巧,觉得有用记得一键三连哦。么么哒!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词