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

Java Stream API详解

一、核心概念

Stream API是从Java 8引入的一个强大工具,用于处理集合数据。它提供了一种声明式的方式来操作集合,支持链式调用和并行处理。
关键概念

  • Stream(流):代表一个数据序列,支持聚合操作
  • 中间操作(Intermediate Operations):返回一个新的流,可以链式调用(如 filter, map, sorted
  • 终端操作(Terminal Operations):触发流的处理并返回结果(如 forEach, collect, reduce

二、创建Stream的方式

// 1. 从集合创建
List<String> list = Arrays.asList("Java", "Python", "C++");
Stream<String> stream1 = list.stream();// 2. 从数组创建
String[] array = {"Java", "Python", "C++"};
Stream<String> stream2 = Arrays.stream(array);// 3. 使用Stream.of()创建
Stream<String> stream3 = Stream.of("Java", "Python", "C++");// 4. 创建无限流
Stream<Integer> infiniteStream = Stream.iterate(0, n -> n + 1);

三、常用中间操作

List<String> languages = Arrays.asList("Java", "Python", "C++", "JavaScript");// filter: 过滤元素
List<String> filter = languages.stream().filter(s -> s.startsWith("J")).collect(Collectors.toList());// map: 转换元素
List<Integer> lengths = languages.stream().map(String::length).collect(Collectors.toList());// sorted: 排序
List<String> sorted = languages.stream().sorted().collect(Collectors.toList());// distinct: 去重
List<String> distinct = languages.stream().distinct().collect(Collectors.toList());

四、常用终端操作

List<String> languages = Arrays.asList("Java", "Python", "C++", "JavaScript");// forEach: 遍历
languages.stream().forEach(System.out::println);// collect: 收集结果
List<String> filtered = languages.stream().filter(s -> s.length() > 4).collect(Collectors.toList());// reduce: 归约
Optional<String> concatenated = languages.stream().reduce((s1, s2) -> s1 + "," + s2);// count: 计数
long count = languages.stream().filter(s -> s.startsWith("J")).count();// findFirst: 查找第一个
Optional<String> first = languages.stream().filter(s -> s.startsWith("P")).findFirst();

五、Stream的优势

  1. 声明式编程:更关注“做什么”而不是“怎么做”
  2. 链式调用:操作可以串联,代码更流畅
  3. 函数式编程:支持 lambda 表达式,代码更简洁
  4. 惰性求值:中间操作不会立即执行,提高效率
  5. 并行处理:容易实现并行计算

六、注意事项

  1. 流不可复用:终端操作执行后,流对象失效
  2. 性能考虑:对于简单遍历,传统 for 循环可能更高效
  3. 调试困难Stream 链式操作调试相对困难
  4. 可读性:过于复杂的 Stream 操作可能降低可读性

Stream API是Java 8的一个重要特性,它提供了一种高效且易于使用的方式来处理集合数据,特别适用于复杂的数据处理场景。

http://www.dtcms.com/a/348343.html

相关文章:

  • iptables 防火墙核心知识梳理(附实操指南)
  • VS2022的MFC中关联使用控制台并用printf输出调试信息
  • GPT 模型详解:从原理到应用
  • 构建AI智能体:十二、给词语绘制地图:Embedding如何构建机器的认知空间
  • 大白话解析:多证明验证(Merkle Multi-Proof)​
  • 【Python】CSV批量转Excel工具 (Tkinter版)
  • 【Docker基础】Docker-compose多容器协作案例示例:从LNMP到分布式应用集群
  • 复杂姿态误报率↓78%!陌讯多模态算法在跌倒检测的医疗落地
  • 恶劣天气下漏检率↓79%!陌讯多模态时序融合算法在道路事故识别的实战优化
  • 第16届蓝桥杯C++中高级选拔赛(STEMA)2025年1月12日真题
  • 大模型面试题剖析:模型微调和蒸馏核心技术拆解与考点梳理
  • 爆肝三周,我终于上线了自己的第一个小程序
  • 01-鸿蒙系统概览与发展历程
  • 鸿蒙中Frame分析
  • 线段树相关算法题(1)
  • mybatis过渡到mybatis-plus过程中需要注意的地方
  • 自由学习记录(87)
  • 《飞算Java开发实战:从入门安装到项目部署》
  • FPGA 时序分析(一)
  • ubuntu中的nginx.conf和windows中的nginx.conf内容对比
  • LeetCode 101 刷题 - (1) 第一章 最易懂的贪心算法
  • K8S核心知识点
  • Teams Bot机器人实时语音识别的多引擎的处理
  • 【大语言模型 17】高效Transformer架构革命:Reformer、Linformer、Performer性能突破解析
  • 【机器人零件】蜗轮蜗杆减速器
  • Android面试指南(五)
  • 数据挖掘 4.1~4.7 机器学习性能评估参数
  • RandAR训练自己的数据集
  • 多核多线程消息队列传递指针存在可见性问题吗?
  • 如何安全解密受限制的PDF文件