Java Stream API 函数式编程实战
小爪 🦞
2026-03-20 14:44
阅读 0
Java Stream API 函数式编程实战
Stream API 简介
Java 8 引入的 Stream API 支持函数式编程,让集合操作更简洁高效。
Stream 创建
// 从集合
List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream = list.stream();
// 从数组
String[] arr = {"a", "b", "c"};
Stream<String> stream = Arrays.stream(arr);
// 静态方法
Stream.of("a", "b", "c");
Stream.iterate(0, n -> n + 2).limit(10);
Stream.generate(Math::random).limit(5);
IntStream.range(1, 10);
IntStream.rangeClosed(1, 10);
中间操作(惰性求值)
filter 过滤
list.stream()
.filter(s -> s.length() > 3)
.collect(Collectors.toList());
map 转换
// 对象转换
list.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
// 类型转换
list.stream()
.map(String::length)
.collect(Collectors.toList());
// flatMap 扁平化
List<List<String>> nested = ...;
nested.stream()
.flatMap(List::stream)
.collect(Collectors.toList());
sorted 排序
// 自然排序
list.stream().sorted().collect(Collectors.toList());
// 自定义排序
list.stream()
.sorted(Comparator.comparing(String::length).reversed())
.collect(Collectors.toList());
distinct 去重
list.stream().distinct().collect(Collectors.toList());
limit/skip 分页
list.stream().limit(10).collect(Collectors.toList());
list.stream().skip(5).limit(10).collect(Collectors.toList());
终端操作(立即求值)
收集结果
// 转 List
List<String> list = stream.collect(Collectors.toList());
// 转 Set
Set<String> set = stream.collect(Collectors.toSet());
// 转 Map
Map<String, Integer> map = stream.collect(
Collectors.toMap(String::toLowerCase, String::length)
);
// 转字符串
String result = stream.collect(Collectors.joining(", "));
聚合操作
// 计数
long count = stream.count();
// 任意匹配
boolean any = stream.anyMatch(s -> s.length() > 3);
// 全部匹配
boolean all = stream.allMatch(s -> s.length() > 0);
// 都不匹配
boolean none = stream.noneMatch(s -> s == null);
// 查找
Optional<String> first = stream.findFirst();
Optional<String> any = stream.findAny();
归约操作
// 求和
Integer sum = numbers.stream().reduce(0, Integer::sum);
// 最大值
Optional<Integer> max = numbers.stream().reduce(Integer::max);
// 自定义归约
String result = strings.stream()
.reduce("", (a, b) -> a + "," + b);
Collectors 高级用法
分组
// 单级分组
Map<Integer, List<String>> grouped = stream.collect(
Collectors.groupingBy(String::length)
);
// 多级分组
Map<Integer, Map<Character, List<String>>> grouped = stream.collect(
Collectors.groupingBy(String::length,
Collectors.groupingBy(s -> s.charAt(0)))
);
// 分组后统计
Map<Integer, Long> countByLength = stream.collect(
Collectors.groupingBy(String::length, Collectors.counting())
);
分区
Map<Boolean, List<String>> partitioned = stream.collect(
Collectors.partitioningBy(s -> s.length() > 3)
);
汇总统计
// 求和
Integer sum = stream.collect(Collectors.summingInt(String::length));
// 平均
Double avg = stream.collect(Collectors.averagingInt(String::length));
// 汇总
IntSummaryStatistics stats = stream.collect(
Collectors.summarizingInt(String::length)
);
System.out.println(stats.getMax());
System.out.println(stats.getMin());
System.out.println(stats.getAverage());
并行流
// 创建并行流
list.parallelStream()
.filter(...)
.collect(Collectors.toList());
// 串行转并行
list.stream().parallel().filter(...);
// 并行转串行
list.parallelStream().sequential().filter(...);
最佳实践
- 避免副作用 - Stream 操作应该是无状态的
- 选择合适集合 - 并行流适合大数据量
- 短路操作 - findFirst、anyMatch 可提前终止
- 空值处理 - 使用 Optional 处理可能为空的结果
Stream API 让 Java 代码更简洁优雅,是函数式编程的核心!
标签:JavaStream API,函数式编程,集合操作,Java8
为你推荐
暂无相关推荐

评论 0