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

【Java Stream】基本用法学习

Java Stream

由于在公司写代码时,发现有大量地方可以优化为使用stream流的方式写,且更加简洁,因此学习了一下stream的基础语法。

Java Stream 是 Java 8 引入的用于处理集合数据的函数式 API,提供了一种高效、声明式的数据处理方式。

1、创建流

// 从集合创建
List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream1 = list.stream(); // 从数组创建
String[] array = {"a", "b", "c"};
Stream<String> stream2 = Arrays.stream(array);// 直接创建
Stream<String> stream3 = Stream.of("a", "b", "c");
Stream<Integer> stream4 = Stream.iterate(0, n -> n + 1); // 无限流
Stream<Double> stream5 = Stream.generate(Math::random);   // 随机数流// 并行流(Parallel Streams)
list.parallelStream()

2、操作

  • 过滤:filter()
List<String> list = Arrays.asList("a", "b", "c");List<String> filtered = list.stream().filter(s -> s.startsWith("a")) // 过滤以"a"开头的元素.collect(Collectors.toList());  // 结果: ["a"]
  • 映射:map()
List<String> list = Arrays.asList("a", "b", "c");List<Integer> lengths = list.stream().map(String::length) // 将字符串映射为其长度.collect(Collectors.toList()); // 结果: [1, 1, 1]
  • 去重 & 排序:distinct()、sorted()
List<String> result = Stream.of("a", "c", "b", "a").distinct()          // 去重 → ["a", "c", "b"].sorted()            // 排序 → ["a", "b", "c"].collect(Collectors.toList());
  • 截取 & 跳过:skip()、limit()
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> subList = nums.stream().skip(2)   // 跳过前2个 → [3,4,5].limit(2)  // 取前2个   → [3,4].collect(Collectors.toList());
  • 遍历:forEach()
list.stream().forEach(System.out::println); // 输出每个元素
  • 聚合计算:count()、max()
long count = list.stream().count();          // 元素总数
Optional<String> max = list.stream().max(String::compareTo); // 最大值
  • 收集结果
    • 转List/Set:Collectors.toList()、Collectors.toSet()
    • 转Map:Collectors.toMap()
    • 分组:Collectors.groupingBy()
// 转List/Set
List<String> listResult = stream.collect(Collectors.toList());
Set<String> setResult = stream.collect(Collectors.toSet());// 转Map
Map<String, Integer> map = list.stream().collect(Collectors.toMap(s -> s, String::length)); // {a=1, b=1, c=1}// 分组
Map<Integer, List<String>> groupByLength = list.stream().collect(Collectors.groupingBy(String::length)); // 按长度分组
http://www.xdnf.cn/news/15359.html

相关文章:

  • sql初学见解
  • 2025上海市“星光计划“信息安全管理与评估赛项二三阶段任务书
  • Spring高级特性——反射和动态代理的性能优化
  • Python---上下文管理器
  • 移动端设备本地部署大语言模型(LLM)
  • 无需付费即可利用AI消除音频噪声和生成字幕
  • 浏览器渲染原理与性能优化全解析
  • 【零基础入门unity游戏开发——unity3D篇】3D光源之——unity反射和反射探针技术
  • 在线事务处理OLTP(Online Transaction Processing)负载是什么?
  • 08.如何正确关闭文件
  • QML 自定义Model基础之QAbstractListModel
  • iw 命令 -- linux 无线管理
  • python kivy 打包apk
  • Ampace厦门新能安科技Verify 测评演绎数字推理及四色测评考点分析、SHL真题题库
  • 入职华为od一个月的感受
  • 用 Node.js 构建模块化的 CLI 脚手架工具,从 GitHub 下载远程模板
  • 【Vue】浏览器缓存 sessionStorage、localStorage、Cookie
  • 初级网安作业笔记1
  • 人工智能之数学基础:神经网络的矩阵参数求导
  • S7-1200 与 ET200SP:PROFINET 设备关键数据 IP 地址、MAC 地址及 MRP 环状态获取
  • Spring Boot RESTful API 设计指南:查询接口规范与最佳实践
  • 在新版本的微信开发者工具中使用npm包
  • java8 ConcurrentHashMap 桶级别锁实现机制
  • css如何同时给元素设置背景和背景图?
  • 004_Claude功能特性与API使用
  • 垃圾收集器-Serial Old
  • Java_Springboot技术框架讲解部分(二)
  • 飞算JavaAI:开启 Java 开发 “人机协作” 新纪元
  • PyTorch武侠演义 第一卷:初入江湖 第3章:神经网络派的绝世武功
  • 全星质量管理QMS软件系统——汽车零部件制造业数字化转型的质量管理中枢