Java Stream 流常用方法
在 Java 8 引入的众多特性中,Stream API 无疑是最能提升代码优雅度和开发效率的工具之一。它让我们能以声明式的方式处理数据集合(类似于 SQL 语句),告别了繁琐的 for 循环和复杂的逻辑判断。
本文将基于实战角度,带你全面掌握 Stream 流的创建、中间操作、终结操作以及方法引用的高级用法。
一、不可变集合
在开始学习 Stream 之前,了解 JDK 9+ 引入的不可变集合工厂方法非常有用,它们常被用来快速创建测试数据。
- List 和 Set:
List.of()和Set.of(),形参依次传入 value。 - Map:
Map.of(),形参依次传入 key 和 value。
// 示例
List<String> list = List.of("张三", "李四", "王五");
Set<String> set = Set.of("A", "B", "C");
Map<String, Integer> map = Map.of("张三", 18, "李四", 20);
二、第一步:获取 Stream 流
Stream 流的生命周期始于'数据源'。不同的数据结构获取流的方式略有不同。
1. 单列集合 (List, Set)
直接调用集合的 .stream() 方法。
ArrayList<String> list = new ArrayList<>();
Stream<String> stream = list.stream();
2. 双列集合 (Map)
Map 本身不能直接获取流,需要先将其转换为单列集合(KeySet 或 EntrySet)后再获取。
HashMap<String, Integer> map = new HashMap<>();
// 1. 对键获取流
Stream<String> keyStream = map.keySet().stream();
// 2. 对键值对获取流 (常用)
Stream<Map.Entry<String, Integer>> entryStream = map.entrySet().stream();
3. 数组
使用 Arrays 工具类的静态方法。
int[] arr = {1, 2, 3};
Arrays.stream(arr);

