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

【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.dtcms.com/a/277342.html

相关文章:

  • Vue 3 TypeScript 接口(Interface)使用
  • 反射内存卡的使用
  • 【Linux系统与网络编程】13:线程同步
  • AWS Lambda Container 方式部署 Flask 应用并通过 API Gateway 提供访问
  • C++ 模板元编程 type_traits
  • RedisJSON 技术揭秘`JSON.ARRTRIM`用窗口裁剪,让数组保持“刚刚好”
  • 5G NR PDCCH之处理流程
  • [Nagios Core] CGI接口 | 状态数据管理.dat | 性能优化
  • k8s存储入门
  • RabbitMQ 之仲裁队列
  • Matplotlib 中 plt.pcolormesh 函数的使用详解
  • 【sql学习之拉链表】
  • 【LLM-Agent】Qwen-Agent智能体框架使用
  • trySend、Channel 和 Flow 的工作原理
  • 【CMake】CMake创建、安装、使用静态库和动态库
  • 操作系统-第四章存储器管理和第五章设备管理-知识点整理(知识点学习 / 期末复习 / 面试 / 笔试)
  • 【hivesql 已知维度父子关系加工层级表】
  • C++每日刷题day2025.7.13
  • 什么是RAG(Retrieval-Augmented Generation)?一文读懂检索增强生成
  • RabbitMQ面试精讲 Day 2:RabbitMQ工作模型与消息流转
  • 12.I/O复用
  • 前端性能与可靠性工程:资源优化 - 加载性能的“低垂果实”
  • 从零开始学习深度学习-水果分类之PyQt5App
  • SpringBoot集成Redis、SpringCache
  • C++ 强制类型转换
  • 【操作系统】strace 跟踪系统调用(一)
  • (LeetCode 每日一题) 2410. 运动员和训练师的最大匹配数(排序、双指针)
  • es里为什么node和shard不是一对一的关系
  • Augment AI 0.502.0版本深度解析:Task、Guidelines、Memory三大核心功能实战指南
  • 将 NumPy 数组展平并转换为 Python 列表