Stream流式编程

1.Stream流是什么

  • Stream 是 JDK 8+ 新增的流式编程 API,专门用来简化集合 / 数组的数据处理。
  • 分为两大类:
    • 中间操作:链式调用,延迟执行,返回新流,可连续调用
    • 终端操作:触发整个流执行,执行后流关闭,不能再使用.

二、完整方法分类 + 功能 + 示例

一、获取流(创建流)

方法 作用
集合.stream() 普通集合获取串行流(最常用)
集合.parallelStream() 获取并行流,多线程处理数据
Arrays.stream(数组) 数组转流
Stream.of(元素...) 快速创建流
java 复制代码
List<String> list = new ArrayList<>();
Stream<String> stream = list.stream();

二、中间操作(链式调用,不立即执行)

1. map 映射(一对一转换,重点)

核心:每个元素转为另一个值 / 类型,元素数量不变常用场景:

  • 对象提取字段
  • 数值计算、字符串加工
  • 类型转换(对象→字符串、字符串→数字等)
java 复制代码
// 提取字段
list.stream().map(item -> item.getName());
// 数值运算
list.stream().map(n -> n * 2);
// 类型转换
list.stream().map(Integer::parseInt);

2. filter 过滤

核心:按条件剔除元素,保留符合条件的

java 复制代码
// 保留大于5的数字
stream.filter(n -> n > 5);

3. sorted 排序

  • sorted():自然升序(默认)
  • sorted(比较器):自定义排序(降序、按对象字段排序)
java 复制代码
stream.sorted();
stream.sorted((a,b) -> b - a); // 降序

4. distinct 去重

基于 equals() 去除重复元素

java 复制代码
stream.distinct();

5. limit 截取

截取前 N 个元素

java 复制代码
stream.limit(3); // 只取前3个

6. skip 跳过

跳过前 N 个元素

java 复制代码
stream.skip(2); // 跳过前2个

7. flatMap 扁平化(一对多)

把嵌套集合 拆成单层流(一个元素变多个元素),和 map 区分:

  • map:一对一
  • flatMap:一对多
java 复制代码
// 把 List<List<Integer>> 拆成普通 Integer 流
stream.flatMap(Collection::stream);

8. 基础类型专用 map(优化装箱)

  • mapToInt():转 IntStream
  • mapToLong():转 LongStream
  • mapToDouble():转 DoubleStream多用于数值求和、求平均等计算。

三、终端操作(触发执行,结束流)

1. forEach 遍历

逐个消费元素,做输出、执行逻辑

java 复制代码
stream.forEach(System.out::println);

2. collect 收集(最常用)

把流转回集合 / 字符串 / 分组等结构:

  • Collectors.toList():收集为 List
  • Collectors.toSet():收集为 Set(自动去重)
  • Collectors.toMap():收集为 Map
  • Collectors.groupingBy():分组
  • Collectors.joining():字符串拼接
java 复制代码
// 收集为Set(你代码里的用法)
stream.collect(Collectors.toSet());

3. count 统计数量

返回流中元素总个数,返回值 long

java 复制代码
long num = stream.count();

4. max / min 最大 / 最小值

获取流中最值,返回 Optional 防止空指针

java 复制代码
stream.max(Integer::compareTo);
stream.min(Integer::compareTo);

5. 匹配判断(返回 boolean)

  • anyMatch(条件):任意一个满足条件 → true
  • allMatch(条件):全部满足条件 → true
  • noneMatch(条件):全部不满足条件 → true
java 复制代码
stream.anyMatch(n -> n > 10);

6. reduce 归约聚合

把所有元素反复合并为单个结果,常用于:求和、求乘积、字符串拼接

java 复制代码
// 求和
stream.reduce(0, Integer::sum);

7. findFirst / findAny 取值

  • findFirst():获取流第一个元素
  • findAny():获取任意一个元素(并行流常用)

三、核心口诀 & 区分(方便记忆)

  1. map:提取字段、转换值、换类型(一对一)
  2. filter:按条件筛数据
  3. sorted :排序、distinct:去重
  4. limit/skip:截取、跳过
  5. flatMap:拆嵌套集合(一对多)
  6. collect:流转回集合(收尾必备)
  7. 其余:遍历、统计、匹配、取最值
相关推荐
幽灵诶1 小时前
Mysql(基于测试的学习)
数据库·mysql
砚底藏山河1 小时前
python量化自定义周期 K 线合成
java·开发语言·数据库·python·金融
宇宙无敌暴龙战士6662 小时前
MySQL 8 库表操作学习笔记:SQL 基础、库表管理、约束与用户授权全流程
数据库·sql·mysql·学习笔记·后端开发
猿究院_夏燊2 小时前
MySQL 的四种隔离级别
java·数据库·mysql
say_fall2 小时前
【Linux系统编程】Ext 文件系统:磁盘与存储、文件与目录、现代计算机究竟如何寻找文件
linux·运维·服务器·数据库·c++
共享家95273 小时前
408 操作系统第一章
服务器·数据库·windows
这个DBA有点耶4 小时前
连拿六年第一后宣布出海:国产数据库凭什么敢撕掉“平替”的标签?
数据库·人工智能·架构
云和恩墨4 小时前
数据库监控简史:从会回答到能交付——AI-DBA如何成为真正的数字同事
数据库·人工智能·dba
这个DBA有点耶5 小时前
为什么删掉索引后,查询瞬间变快了?探讨MySQL的随机I/O与顺序I/O博弈
数据库·mysql·代码规范
kingx36 小时前
BugKu 渗透测试 4 实战:文件上传打点,5 Flag 全通
数据库·渗透测试·web·内网渗透