首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【Java Stream API详解与使用】

【Java Stream API详解与使用】

作者头像
心疼你的一切
发布2026-01-20 15:15:37
发布2026-01-20 15:15:37
1750
举报
文章被收录于专栏:人工智能人工智能

👉前言

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

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

👉一、Stream API 核心概念

  1. 什么是Stream?

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

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

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

2.与集合的区别:

代码语言:javascript
复制
// 传统集合操作(外部迭代)
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.集合创建

代码语言:javascript
复制
	list.stream() / list.parallelStream()

2.数组转换

代码语言:javascript
复制
Arrays.stream(array)

3.直接创建

代码语言:javascript
复制
Stream.of("a", "b", "c")

4.生成器方法

代码语言:javascript
复制
Stream.iterate(0, n -> n+2)

Stream.generate(Math::random)

5.基本类型流

代码语言:javascript
复制
IntStream.range(1, 5)

👉三、中间操作(Intermediate Operations)

1.筛选与切片

代码语言:javascript
复制
// 过滤年龄>18的用户
.filter(user -> user.getAge() > 18) 

// 去重(依赖equals方法)
.distinct() 

// 取前5个
.limit(5) 

// 跳过前3个
.skip(3)

2.映射操作

代码语言:javascript
复制
// 提取用户姓名
.map(User::getName) 

// 扁平化处理(合并嵌套集合)
.flatMap(list -> list.stream()) 

// 记录中间值(调试用)
.peek(System.out::println) 

3.排序

代码语言:javascript
复制
// 自然排序
.sorted() 

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

👉四、终止操作(Terminal Operations)

1.遍历与收集

代码语言:javascript
复制
// 遍历输出
.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.匹配与查找

代码语言:javascript
复制
// 是否存在成年人?
.anyMatch(u -> u.getAge() >= 18) 

// 查找第一个元素
.findFirst() 

// 查找任意元素(并行流优化)
.findAny() 

3.归约统计

代码语言:javascript
复制
// 计算总年龄
.mapToInt(User::getAge).sum() 

// 求最大值
.max(Comparator.naturalOrder()) 

// 自定义归约(累加器)
.reduce(0, Integer::sum) 

👉五、并行流与性能优化

代码语言:javascript
复制
// 转换为并行流
List<User> result = users.parallelStream()
                         .filter(u -> u.getAge() > 18)
                         .collect(Collectors.toList());

// 注意事项:
// 1. 确保操作线程安全
// 2. 数据量小时可能降低性能
// 3. 避免共享可变状态

👉六、应用场景

1.多层数据转换

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

2.分组统计

代码语言:javascript
复制
Map<String, Long> countByCity = users.stream()
    .collect(Collectors.groupingBy(
        User::getCity, 
        Collectors.counting()
    ));

3.数值统计

代码语言:javascript
复制
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开发技巧,觉得有用记得一键三连哦。么么哒!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-01-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 👉前言
  • 👉一、Stream API 核心概念
  • 👉二、Stream 创建方式
  • 👉三、中间操作(Intermediate Operations)
  • 👉四、终止操作(Terminal Operations)
  • 👉五、并行流与性能优化
  • 👉六、应用场景
  • 👉总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档