Java Stream 进阶:收集器与并行流
深入掌握 Stream API 的高级特性,包括自定义 Collector、分组、分区以及并行流性能调优。 · 难度:入门 · +15XP
回顾与进阶
Stream 基础操作(filter、map、reduce)之外,Collectors 工具类提供了强大的归约能力。
常用收集器
List<String> list = stream.collect(Collectors.toList());
Set<String> set = stream.collect(Collectors.toSet());
Map<Integer, List<Person>> byAge = people.stream()
.collect(Collectors.groupingBy(Person::age));
Map<Boolean, List<Person>> adults = people.stream()
.collect(Collectors.partitioningBy(p -> p.age() >= 18));自定义 Collector
Collector<String, StringBuilder, String> joiningCollector = Collector.of(
StringBuilder::new,
(sb, s) -> sb.append(s).append(", "),
(sb1, sb2) -> sb1.append(sb2),
StringBuilder::toString
);并行流注意事项
| 原则 | 说明 |
|---|---|
| 数据量足够大 | 小数据并行反而慢 |
| 无状态、无干扰 | 避免共享可变状态 |
| 使用合适的 ForkJoinPool | 默认公共池,可自定义 |
练习提示
在 starter_code 中,将 people 列表按年龄分组并输出每个年龄组的人数。