将对象列表转为map需用collectors.tomap指定键值提取函数,处理重复键需合并函数,可指定map实现类,空值须预处理。

将对象列表转为 Map 是 Stream API 的常见操作,核心在于明确键和值的来源,并处理键冲突问题。
使用 Collectors.toMap 构造映射
最常用的方式是调用 stream().collect(Collectors.toMap()),需传入两个函数:一个提取键(keyMapper),一个提取值(valueMapper)。
- 键必须唯一,否则会抛出
IllegalStateException - 若对象字段可能为 null,需提前过滤或提供默认值,避免
NullPointerException - 示例:将用户列表按 ID 转为
Map<long string></long>
处理重复键:指定合并策略
当多个对象产生相同键时,需传入第三个参数——合并函数(mergeFunction),决定保留哪个值。
- 保留后一个值:
(oldValue, newValue) -> newValue - 保留前一个值:
(oldValue, newValue) -> oldValue - 合并为新对象(如字符串拼接、数值相加等)
指定 Map 实现类与自定义并发行为
默认返回 HashMap,但可通过第四个参数传入 Supplier 指定其他实现(如 TreeMap 或 ConcurrentHashMap)。
- 需要有序键时,用
TreeMap::new - 多线程环境下收集,用
ConcurrentHashMap::new - 并行流配合
ConcurrentHashMap可提升性能
空值与边界情况处理
Stream 中含 null 键或 null 值时会失败,建议在 collect 前预处理。
- 过滤 null 键:
filter(user -> user.getId() != null) - 替换 null 值:
map(user -> new User(user.getId(), Optional.ofNullable(user.getName()).orElse("未知"))) - 使用
Collectors.collectingAndThen包装结果,统一兜底逻辑
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











