Java 集合 Stream 操作
🧩 基础示例
import java.util.*;
import java.util.stream.*;
public class StreamDemo {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Eve");
// 1. 过滤(filter)
List<String> filtered = names.stream()
.filter(name -> name.length() > 3)
.collect(Collectors.toList());
System.out.println("过滤长度>3: " + filtered);
// 2. 映射(map)
List<Integer> lengths = names.stream()
.map(String::length)
.collect(Collectors.toList());
System.out.println("名字长度: " + lengths);
// 3. 排序(sorted)
List<String> sorted = names.stream()
.sorted()
.collect(Collectors.toList());
System.out.println("按字母排序: " + sorted);
// 4. 去重(distinct)
List<String> withDuplicates = Arrays.asList("Alice", "Bob", "Alice", "David");
List<String> distinct = withDuplicates.stream()
.distinct()
.collect(Collectors.toList());
System.out.println("去重后: " + distinct);
// 5. 限制与跳过(limit, skip)
List<String> limited = names.stream()
.skip(1)
.limit(3)
.collect(Collectors.toList());
System.out.println("跳过1个取3个: " + limited);
}
}⚙️ 进阶操作
import java.util.*;
import java.util.stream.*;
public class StreamAdvancedDemo {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(3, 6, 2, 8, 3, 9, 2);
// 1. 聚合操作
int sum = numbers.stream().mapToInt(Integer::intValue).sum();
double average = numbers.stream().mapToInt(Integer::intValue).average().orElse(0);
int max = numbers.stream().mapToInt(Integer::intValue).max().orElse(0);
System.out.println("Sum=" + sum + ", Avg=" + average + ", Max=" + max);
// 2. 分组(groupingBy)
Map<Integer, List<Integer>> groupByMod = numbers.stream()
.collect(Collectors.groupingBy(n -> n % 2));
System.out.println("按奇偶分组: " + groupByMod);
// 3. 统计信息(summaryStatistics)
IntSummaryStatistics stats = numbers.stream().mapToInt(Integer::intValue).summaryStatistics();
System.out.println("统计信息: " + stats);
// 4. 拼接字符串(joining)
List<String> words = Arrays.asList("Java", "Stream", "API");
String joined = words.stream().collect(Collectors.joining(" - "));
System.out.println("拼接结果: " + joined);
// 5. flatMap(扁平化)
List<List<Integer>> listOfLists = Arrays.asList(
Arrays.asList(1, 2, 3),
Arrays.asList(4, 5),
Arrays.asList(6, 7, 8)
);
List<Integer> flattened = listOfLists.stream()
.flatMap(List::stream)
.collect(Collectors.toList());
System.out.println("扁平化结果: " + flattened);
}
}🧠 总结:常见 Stream 操作
| 操作 | 含义 | 示例 |
|---|---|---|
filter() |
过滤元素 | stream.filter(x -> x > 10) |
map() |
转换类型或属性 | stream.map(String::length) |
flatMap() |
扁平化嵌套集合 | stream.flatMap(List::stream) |
sorted() |
排序 | stream.sorted() |
distinct() |
去重 | stream.distinct() |
limit() / skip() |
限制数量 / 跳过元素 | stream.limit(5) |
collect() |
收集结果 | Collectors.toList()、Collectors.toMap() |
groupingBy() |
按规则分组 | Collectors.groupingBy(...) |
reduce() |
累积计算 | stream.reduce(0, Integer::sum) |
forEach() |
遍历执行操作 | stream.forEach(System.out::println) |
Java 集合 Stream 操作
https://liuyuhe666.github.io/2025/11/06/Java-集合-Stream-操作/