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. 其余:遍历、统计、匹配、取最值
相关推荐
这个DBA有点耶6 分钟前
ELT 工具选型完整指南:从 ETL 差异分析到工程落地
数据库·架构·代码规范
IvorySQL14 分钟前
PostgreSQL 日报|堆表选择性索引更新(10 月 13 日)
数据库·人工智能·postgresql·开源·区块链
张洛闻Eren21 分钟前
Ansible【第一课】:Ansible介绍
运维·数据库·云原生·kubernetes·github·ansible
深圳市益普科技有限公司1 小时前
中小封装厂上 MES,为什么十个项目九个坑?
大数据·数据库·人工智能
云边云科技_云网融合1 小时前
从 POS 机到访客 Wi-Fi:零售门店安全建设的完整解法
服务器·网络·数据库
天行健,君子而铎1 小时前
知形-数据库风险监测系统:非侵入式、可溯源、差异化的数据库安全方案
网络·数据库·安全
这个DBA有点耶1 小时前
分布式事务深度:TCC空回滚、悬挂与Saga补偿风暴的根因与解法
数据库·mysql·代码规范
执笔为剑1 小时前
2.1.2-2、V8R3迁移到V8R6-迁移介绍
数据库
hiahiahia1231 小时前
Message 和对话
服务器·前端·数据库
又尔D.2 小时前
MySQL下载安装
数据库·mysql