⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

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 列表按年龄分组并输出每个年龄组的人数。

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 133 篇
0 完成
🔥 0