🌊 Java Stream API 是什么?
Stream API 是 Java 8 引入的用于处理集合(Collection)或数组的一种全新数据处理方式。
特点:
- 声明式(不需要写 for 循环)
- 链式调用(像 SQL)
- 内部迭代(由 Stream 自己遍历)
- 高性能(支持并行流)
🌟 Stream 的三大步骤(核心套路)
- 创建 Stream(Source)
- 中间操作(Intermediate) → 过滤、映射、排序 …
- 终端操作(Terminal) → 收集、求和、统计、forEach
1️⃣ 创建 Stream
List<String> list = Arrays.asList("Java", "Stream", "API");
// 从集合创建 Stream
Stream<String> stream1 = list.stream();
// 从数组创建
Stream<Integer> stream2 = Stream.of(1, 2, 3, 4);
// 无限流
Stream<Double> random = Stream.generate(Math::random);
2️⃣ 中间操作(常用)
✔ filter 过滤
list.stream()
.filter(s -> s.length() > 3)
✔ map 映射(值转换)
list.stream()
.map(String::toUpperCase)
✔ sorted 排序
list.stream()
.sorted()
✔ distinct 去重
list.stream()
.distinct()
✔ limit / skip
list.stream()
.skip(2)
.limit(3)
3️⃣ 终端操作(常用)
✔ collect 转 List
List<String> result = list.stream()
.filter(s -> s.startsWith("J"))
.collect(Collectors.toList());
✔ forEach
list.stream().forEach(System.out::println);
✔ count
long count = list.stream().count();
✔ 求最大/最小
Optional<Integer> max = Stream.of(1, 5, 3).max(Integer::compareTo);
🎯 常用实战案例
📌 案例 1:过滤 + 映射 + 收集
List<String> names = Arrays.asList("jack", "tom", "jerry");
List<String> result = names.stream()
.filter(n -> n.length() > 3) // 过滤
.map(String::toUpperCase) // 转大写
.collect(Collectors.toList()); // 转回 List
System.out.println(result); // [JACK, JERRY] 📌 案例 2:对对象列表过滤
class User {
String name;
int age;
}
List<User> users = ...
List<User> adults = users.stream()
.filter(u -> u.getAge() >= 18)
.collect(Collectors.toList());
📌 案例 3:分组 groupingBy
Map<Integer, List<User>> group = users.stream()
.collect(Collectors.groupingBy(User::getAge));
📌 案例 4:根据某个字段排序
List<User> sorted = users.stream()
.sorted(Comparator.comparing(User::getAge))
.collect(Collectors.toList());
📌 案例 5:统计 sum / avg
int totalAge = users.stream()
.mapToInt(User::getAge)
.sum();
📌 案例 6:任意匹配 / 全部匹配 / 无匹配
users.stream().anyMatch(u -> u.getAge() > 18); // 有人 > 18?
users.stream().allMatch(u -> u.getAge() > 0); // 全部 > 0?
users.stream().noneMatch(u -> u.getAge() < 0); // 无人 < 0? 🚀 并行流(多线程加速大数据处理)
list.parallelStream()
.filter(...)
.map(...)
.collect(Collectors.toList());
适用于大规模数据处理。
🔥 最后快速记忆口诀
stream()
.filter() // 过滤
.map() // 转换
.sorted() // 排序
.collect() // 终结