系列文章目录
JAVA
文章目录
- 系列文章目录
- 👉前言
- 👉一、Stream API 核心概念
- 👉二、Stream 创建方式
- 👉三、中间操作(Intermediate Operations)
- 👉四、终止操作(Terminal Operations)
- 👉五、并行流与性能优化
- 👉六、应用场景
- 👉壁纸分享
- 👉总结
👉前言
Java Stream API 是Java 8中引入的一项功能,它允许程序员以声明式方式处理数据集合。通过Stream API,可以对数据执行复杂的查询操作,而不必编写冗余的代码。Stream 不是数据结构,它更像是一个高级版本的Iterator。单次使用,数据只能遍历一次,遍历过程中你可以对数据进行过滤、排序、聚合等操作。
博客将会介绍Java Stream API详解与使用。
希望这篇博客对Unity的开发者有所帮助。
大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。
欢迎点赞评论哦.下面就让我们进入正文吧 !
提示:以下是本篇文章正文内容,下面案例可供参考
👉一、Stream API 核心概念
- 什么是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.注意事项
- 流不可复用:终止操作后流自动关闭
- 避免副作用:不要在操作中修改外部变量
- 资源管理:IO流需手动关闭(如Files.lines())
- 空值处理:使用Optional处理可能为null的结果
- 链式操作顺序优化:先filter再sorted,减少排序数据量
- 方法引用优化:User::getName 比 u -> u.getName() 更简洁
- 避免复杂Lambda:超过3行的Lambda建议提取为方法
Java Stream API 是一个功能强大的工具,适用于处理集合和数据流。它提供了一种简洁而高效的方法来操作数据,尤其是在处理大量数据时。这个API优化了数据处理逻辑,使开发者能够以更少的代码执行复杂的数据转换和聚合操作。利用Java Stream API,可以轻松实现数据过滤、排序、转换及汇总,极大地提升了代码的可读性和可维护性。同时,Stream API 的函数式编程特性有助于减少错误和侧效应,使得并发程序的编写更为安全。通过使用Java Stream API,开发者可以写出更简洁、更高效、更易于维护的代码,同时享受到函数式编程带来的好处。
👉壁纸分享
👉总结
本次总结的就是Java Stream API详解与使用, 有需要会继续增加功能
如能帮助到你,就帮忙点个赞吧,三连更好哦,谢谢
你的点赞就是对博主的支持,有问题记得留言评论哦!
不定时更新Unity开发技巧,觉得有用记得一键三连哦。么么哒!