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

Stream流-从进阶到起飞

个人主页:一条泥憨鱼(欢迎各位大佬莅临)精选专栏:数据结构与算法JavaSE ,苍穹外卖日记前言为了让集合操作变得更简洁更优雅更像“操作数据流水线”在 Java 8 之后Java 增加了一个非常重要的特性Stream 流很多同学第一次看到 Stream 时都会觉得list.stream()好抽象。其实本质上Stream 就是一种“处理数据”的方式。类似筛选数据 排序数据 统计数据 加工数据一、为什么要学习 Stream假设我们要找出集合中所有年龄大于 18 的人。传统写法ArrayListInteger list new ArrayList(); list.add(10); list.add(20); list.add(30); ArrayListInteger result new ArrayList(); for(Integer age : list){ if(age 18){ result.add(age); } } System.out.println(result);虽然能实现。但是代码繁琐逻辑不够清晰需要手动循环Stream 写法list.stream() .filter(age - age 18) .forEach(System.out::println);是不是一下子简洁很多哈哈这就是 Stream 的魅力。二、什么是 StreamStream 翻译流我们可以理解为数据在“流水线”中进行加工处理。如原始数据 ↓ 过滤 ↓ 排序 ↓ 去重 ↓ 输出结果三、Stream 的特点特点说明不存储数据只是处理数据不改变原集合原集合不会变支持链式操作写法简洁函数式编程Lambda 表达式四、创建 Stream 流1. List 创建 StreamListString list new ArrayList(); StreamString stream list.stream();2. Set 创建 StreamSetString set new HashSet(); StreamString stream set.stream();3. Map 创建 StreamMap 不能直接 stream需要map.keySet().stream() map.values().stream() map.entrySet().stream()示例MapInteger,String map new HashMap(); map.put(1,Java); map.put(2,Python); map.entrySet().stream() .forEach(System.out::println);4. 数组创建 StreamArrays.stream(arr)示例int[] arr {1,2,3}; Arrays.stream(arr) .forEach(System.out::println);五、Stream 常用方法Stream 操作分两类类型说明中间操作返回新的 Stream终结操作结束 Stream六、中间操作1. filter() 过滤作用筛选数据示例过滤偶数import java.util.Arrays; public class Demo { public static void main(String[] args) { Arrays.asList(1,2,3,4,5,6) .stream() .filter(n - n % 2 0) .forEach(System.out::println); } }输出2 4 62. map() 加工数据作用转换数据示例数字平方import java.util.Arrays; public class Demo { public static void main(String[] args) { Arrays.asList(1,2,3) .stream() .map(n - n * n) .forEach(System.out::println); } }输出1 4 93. sorted() 排序示例Arrays.asList(5,1,3,2) .stream() .sorted() .forEach(System.out::println);输出1 2 3 5降序排序.sorted((a,b) - b - a)4. distinct() 去重示例Arrays.asList(1,1,2,2,3,3) .stream() .distinct() .forEach(System.out::println);输出1 2 35. limit() 获取前几个示例Arrays.asList(1,2,3,4,5) .stream() .limit(3) .forEach(System.out::println);输出1 2 36. skip() 跳过元素示例Arrays.asList(1,2,3,4,5) .stream() .skip(2) .forEach(System.out::println);输出3 4 5七、终结操作1. forEach() 遍历stream.forEach(System.out::println);2. count() 统计数量示例long count Arrays.asList(1,2,3,4) .stream() .count(); System.out.println(count);输出43. collect() 收集结果最重要的方法之一。示例收集为 Listimport java.util.List; import java.util.stream.Collectors; public class Demo { public static void main(String[] args) { ListInteger list Arrays.asList(1,2,3,4,5) .stream() .filter(n - n % 2 0) .collect(Collectors.toList()); System.out.println(list); } }输出[2, 4]八、Stream 完整案例案例处理学生成绩需求找出大于80分的成绩 按降序排序 取前3名代码import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Demo { public static void main(String[] args) { ListInteger scores Arrays.asList(90,75,88,60,95,85); ListInteger result scores.stream() .filter(s - s 80) .sorted((a,b) - b - a) .limit(3) .collect(Collectors.toList()); System.out.println(result); } }输出[95, 90, 88]九、Stream 与传统循环对比对比for循环Stream写法繁琐简洁可读性一般高链式操作不支持支持函数式编程不支持支持十、注意事项1. Stream 只能使用一次错误用法StreamString stream list.stream(); stream.forEach(System.out::println); stream.forEach(System.out::println);会报错因为流已经关闭。2. Stream 不会修改原数据list.stream().sorted();不会改变原集合。十一、小tips1. Stream 是什么一种操作数据的流水线。2. Stream 有什么优点代码简洁支持链式编程函数式风格3. 中间操作和终结操作区别类型特点中间操作返回 Stream终结操作返回结果并结束流十二、常用方法总结方法作用filter过滤map转换sorted排序distinct去重limit截取skip跳过forEach遍历count统计collect收集十三、一张图理解 Stream集合数据 ↓ stream() ↓ filter() ↓ map() ↓ sorted() ↓ collect() ↓ 结果集合十四、小结Stream 核心思想“像流水线一样处理数据”Stream 最核心优势代码更简洁 逻辑更清晰 支持函数式编程Stream 流本质上就是 Java 用来“优雅处理集合数据”的工具。
http://www.zskr.cn/news/1336788.html

相关文章:

  • 把FlashAttention装进昇腾NPU:为啥它能让大模型推理快3倍?
  • AFSIM-模型导入导出-源码级Bug修改
  • 【Perplexity词组搭配查询避坑清单】:8个致命误用场景+3类伪低困惑度陷阱,资深语言工程师紧急预警
  • 本地计算机 上的 postgresql-x64-12 服务启动后停止
  • STM32CubeMX 6.14版本保姆级安装教程(附CSDN下载链接,解决官网卡顿)
  • 1987年5月25日晚上23-24点出生性格、运势和命运
  • 昇腾CANN shmem:把多张 NPU 的 HBM 变成一块全局内存
  • Windows下安装OpenCode并配置oh-my-openagent和superpowers
  • RX65N嵌入式开发实战:从硬件设计到外设驱动与调试
  • AI一周事件 · 2026-05-13 至 2026-05-19
  • 别再手动调阈值了!OpenMV自适应色块识别保姆级教程(附完整Python代码)
  • 5分钟掌握AI音频分离:Retrieval-based-Voice-Conversion-WebUI终极指南
  • Option ‘importsNotUsedAsValues‘ has been removed. Please remove it from your configuration
  • 《数学公理体系·第三部·数术几何》(2026 年版)
  • 背单词为什么不背词典:CANN上FlashAttention的分块逻辑
  • 昇腾CANN ascend-boost-comm:M×N 算子复用是怎么做到的
  • 2026年泡沫雕塑优点全面解析:定义、分类及应用领域百科
  • 聊天技巧教程
  • 2026年4月过滤器市场风向标:这些浅层砂厂家受青睐,旁流水处理器/精密过滤器/浅层砂过滤器,过滤器公司推荐 - 品牌推荐师
  • IDEA通义灵码实战:用它生成的JUnit单元测试,真的能直接提交吗?
  • ROS仿真第一步:搞定Solidworks到URDF的转换(含履带机器人特殊问题探讨)
  • 科研避坑指南:String+Cytoscape做PPI分析时,CytoNCA计算Betweenness后千万别忘了这步!
  • 告别乱码!手把手教你用FontCvt为STM32的emWin项目定制精简中文字库
  • 别再只会真彩色了!用ENVI玩转波段组合:揭秘植被红、水体蓝背后的遥感密码
  • 从Simulink模型到S32K3xx芯片:手把手教你玩转NXP官方MBD工具包(v1.4实战)
  • LaTeX论文返修必备:用xcolor和xpatch宏包一键高亮正文与新增参考文献
  • 2026年4月知名的抛光蜡厂商推荐,模具/麻轮/抛光机/千叶轮/抛光蜡/焊管机,抛光蜡公司推荐分析 - 品牌推荐师
  • 告别HAL_Delay!用STM32CubeMX定时器PWM模式优雅驱动ULN2003步进电机
  • 3分钟永久保存B站缓存:m4s-converter让珍贵视频永不消失
  • 瑞萨RA4M2开发板入门:从零搭建LED闪烁工程与FSP配置详解