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. 其余:遍历、统计、匹配、取最值
相关推荐
Bert.Cai1 小时前
Oracle ASCII函数详解
数据库·oracle
跨境猫小妹1 小时前
多国海关字段持续细化后跨境卖家如何搭建商品信息映射表
大数据·数据库·人工智能·跨境电商·跨境·营销策略
峥无1 小时前
MySQL 最全数据类型详解(数值/字符串/日期/枚举集合)
数据库·mysql
IT策士1 小时前
Redis 从入门到精通:Redis Sentinel 哨兵
数据库·redis·sentinel
云器科技1 小时前
螳螂科技:从组装到统一,如何用云器 Lakehouse 完美替代“MC+DW+ADB”三件套?
数据库·数据仓库·人工智能
Amnesia0_02 小时前
MySQL的访问和数据流动
数据库·mysql
AI2中文网2 小时前
App Inventor 2 数据库方案全览:从本地存储到云端服务
数据库·oracle·app inventor
Arbori_262152 小时前
找回mysql root 密码
数据库·mysql
zlpzlpzyd2 小时前
spring boot 4.1发布
java·数据库·spring boot