Stream 是对集合对象功能的增强,它不是集合,也不存储数据,而是从集合中抽象出一条数据通道,让你可以用链式方式一步步处理数据。
🔧 常见操作分类
类型 | 方法举例 |
---|---|
创建 | stream() , Stream.of() , Arrays.stream() |
中间操作 | filter() , map() , sorted() , limit() , distinct() |
终结操作 | collect() , forEach() , count() , reduce() |
🔍 常用示例
1️⃣ 过滤 filter
List<String> names = Arrays.asList("Tom", "Jerry", "Tim");
names.stream()
.filter(name -> name.startsWith("T"))
.forEach(System.out::println); // 输出 Tom, Tim
2️⃣ 映射 map
java
List<String> names = Arrays.asList("tom", "jerry");
List<String> upper = names.stream()
.map(String::toUpperCase)
.collect(Collectors.toList()); // [TOM, JERRY]
3️⃣ 排序 sorted
java
List<Integer> nums = Arrays.asList(5, 2, 9);
List<Integer> sorted = nums.stream()
.sorted()
.collect(Collectors.toList()); // [2, 5, 9]
4️⃣ 去重 distinct
java
List<Integer> nums = Arrays.asList(1, 2, 2, 3);
List<Integer> unique = nums.stream()
.distinct()
.collect(Collectors.toList()); // [1, 2, 3]
5️⃣ 统计 count / max / min
java
long count = names.stream()
.filter(name -> name.length() > 3)
.count();
Optional<String> longest = names.stream()
.max(Comparator.comparingInt(String::length));
6️⃣ 规约 reduce
java
int sum = Arrays.asList(1, 2, 3, 4)
.stream()
.reduce(0, (a, b) -> a + b); // 10
7️⃣ 分组 groupingBy
java
List<String> items = Arrays.asList("apple", "banana", "apple", "orange");
Map<String, Long> result = items.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
// 输出: {banana=1, orange=1, apple=2}
⛓️ 链式调用示例:综合使用
java
List<String> result = Arrays.asList("apple", "banana", "cherry", "date")
.stream()
.filter(s -> s.length() > 5)
.map(String::toUpperCase)
.sorted()
.collect(Collectors.toList());
// 输出: [BANANA, CHERRY]