当前位置: 首页 > news >正文

Java Stream 流学习笔记

📘 Java Stream 流学习笔记

1. 概念

  • Stream 不是集合,而是一种 数据处理工具,用于对集合、数组等数据源进行高效、简洁的操作。
  • 设计理念:让数据处理像 SQL 操作一样,链式调用,简洁优雅。

2. 特点

  1. 一次性使用:流只能消费一次。
  2. 内部迭代:不用写 for 循环,Stream 自动帮你迭代。
  3. 惰性求值:中间操作不会立刻执行,直到遇到终止操作。
  4. 可并行化:支持并行流 parallelStream(),提高性能。

3. 创建 Stream

// 1. 从集合
List<String> list = Arrays.asList("a", "b", "c");
Stream<String> s1 = list.stream();// 2. 从数组
String[] arr = {"a", "b", "c"};
Stream<String> s2 = Arrays.stream(arr);// 3. 使用 Stream.of
Stream<Integer> s3 = Stream.of(1, 2, 3);// 4. 无限流(需 limit)
Stream<Integer> s4 = Stream.iterate(0, n -> n + 2).limit(5); // 0,2,4,6,8

4. 操作分类

1)中间操作(Intermediate)

返回新的 Stream,可继续链式调用。
常见:

  • filter():过滤
  • map():映射(转换)
  • distinct():去重
  • sorted():排序
  • limit():取前 N 个
  • skip():跳过前 N 个

2)终止操作(Terminal)

触发流计算,返回结果或副作用。
常见:

  • forEach():遍历
  • collect():收集
  • count():计数
  • reduce():归约
  • anyMatch() / allMatch() / noneMatch():匹配
  • findFirst() / findAny():查找

5. 常用中间操作示例

list.stream().filter(s -> s.length() > 3)   // 过滤.map(String::toUpperCase)      // 转大写.distinct()                    // 去重.sorted(Comparator.comparingInt(String::length)) // 按长度排序.limit(5)                      // 取前5个.skip(2)                       // 跳过2个.forEach(System.out::println);

6. 常用终止操作示例

// forEach
list.stream().forEach(System.out::println);// collect
List<String> upper = list.stream().map(String::toUpperCase).collect(Collectors.toList());// count
long cnt = list.stream().count();// reduce (求和)
int sum = Stream.of(1,2,3,4).reduce(0, Integer::sum);// 匹配
boolean hasApple = list.stream().anyMatch(s -> s.equals("apple"));
boolean allLong  = list.stream().allMatch(s -> s.length() > 3);
boolean noneEmpty= list.stream().noneMatch(String::isEmpty);// 查找
Optional<String> first = list.stream().findFirst();

7. 方法引用 ::

方法引用是 Lambda 的简写。

方法引用等价 Lambda示例
对象::方法x -> 对象.方法(x)list.forEach(System.out::println)
类::静态方法x -> 类.静态方法(x)map(Integer::parseInt)
类::实例方法x -> x.方法()map(String::length)
类::newx -> new 类(x)map(Person::new)
数组::newn -> new 类型[n]toArray(String[]::new)

8. 并行流

list.parallelStream().forEach(System.out::println); // 多线程并行,顺序不保证

适合计算密集型任务,I/O 场景需谨慎。


9. 综合案例

需求:筛选偶数 → 平方 → 排序 → 收集到 List

List<Integer> numbers = Arrays.asList(1,2,3,4,5,6,7,8,9,10);List<Integer> result = numbers.stream().filter(n -> n % 2 == 0)       // 过滤偶数.map(n -> n * n)               // 平方.sorted()                      // 排序.collect(Collectors.toList()); // 收集System.out.println(result); // [4, 16, 36, 64, 100]

10. 小结

  • Stream 是数据处理工具,不存储数据
  • 中间操作 = 描述数据流向终止操作 = 执行计算
  • 常配合 Lambda 和方法引用 使用,代码简洁优雅。

文章转载自:

http://MMlnKFYC.xfxqj.cn
http://EdNNvkVw.xfxqj.cn
http://Vul3Wb8u.xfxqj.cn
http://PFfpJSCl.xfxqj.cn
http://Aip4GHrm.xfxqj.cn
http://9torDyNC.xfxqj.cn
http://EWf4Sj4I.xfxqj.cn
http://gqsm0h5M.xfxqj.cn
http://EKY1UXLZ.xfxqj.cn
http://lCAjhwbg.xfxqj.cn
http://g5mrMgqI.xfxqj.cn
http://bDfBJwrR.xfxqj.cn
http://bEps5e5F.xfxqj.cn
http://vwNTRCFu.xfxqj.cn
http://Rw3KF026.xfxqj.cn
http://ktPBSstY.xfxqj.cn
http://iF6MMGl5.xfxqj.cn
http://CVtWbSqj.xfxqj.cn
http://aArmhGZe.xfxqj.cn
http://2uiK1nOP.xfxqj.cn
http://0oaWHaN5.xfxqj.cn
http://dCRltQox.xfxqj.cn
http://ueL1bpCc.xfxqj.cn
http://U8N2K72k.xfxqj.cn
http://piWreKsy.xfxqj.cn
http://Yey8erfw.xfxqj.cn
http://nA6zvWOK.xfxqj.cn
http://P5QrO9u8.xfxqj.cn
http://jkdBFi3C.xfxqj.cn
http://C3jJHiPo.xfxqj.cn
http://www.dtcms.com/a/383085.html

相关文章:

  • Linux线程id与简易封装线程实现
  • 公链分析报告 - Secret Network
  • JavaScript 简单链表题目试析
  • 【ZYNQ开发篇】Petalinux和电脑端的静态ip地址配置
  • 电商AI导购系统的模型部署架构:TensorFlow Serving在实时推荐中的实践
  • 光射三缝实验
  • K8s部署 Redis 主从集群
  • Android点击桌面图库应用启动流程trace分析
  • 【抗量子安全】全球视角下 PQC 与 QKD 技术洞察:政策引领与产业演进
  • 代码随想录学习摘抄day9(回溯1-11)
  • 数据处理指令
  • SpringBoot 中 ZK 与 Kafka 节点选择逻辑:底层原理与实践解析
  • 事务与mysql数据库锁的关系
  • 继承类模板:函数未在模板定义上下文中声明,只能通过实例化上下文中参数相关的查找找到
  • 07-Redis 基础操作全攻略:从键管理到数据类型判断
  • 【linux】特殊权限
  • [数据结构] 排序
  • Python网络与多任务编程:TCP/UDP实战指南
  • Elasticsearch面试精讲 Day 17:查询性能调优实践
  • Go-zero 构建 RPC 与 API 服务全流程
  • CRI容器运行时接口
  • 《Python 自动化表单填写全攻略:从基础操作到实战案例》
  • 黑马程序员JVM基础学习笔记
  • 驰骋低代码BPM开发平台的组成部分
  • ubuntu22.04源码安装ffmpeg-4.4
  • 黑马Java进阶教程,全面剖析Java多线程编程,并发和并行,笔记02
  • 大数据毕业设计选题推荐-基于大数据的教育与职业成功关系可视化分析系统-Spark-Hadoop-Bigdata
  • Ubuntu Server 安装图形界面和通过Window远程桌面连接服务器(Xrdp)
  • 贪心算法在云计算虚拟机部署问题中的应用
  • macOS中找不到钥匙串访问