Java Stream实现List<SomeType>到值为空HashSet<OtherType>的Map转换
报错原因
Collectors.toMap方法的第二个参数为值映射函数,要求传入Function类型的实现。如果直接把新建的HashSet实例作为参数传入,相当于把对象当成函数接口传入,类型不匹配,直接触发编译错误。
正确实现代码
借助Stream无显式循环完成转换的完整逻辑如下:
// 假设源List为sourceList,元素类型为SomeType Map<SomeType, HashSet<OtherType>> resultMap = sourceList.stream() .collect(Collectors.toMap( // 键直接取List元素本身 item -> item, // 每个元素对应新建空HashSet实例,指定泛型为OtherType item -> new HashSet<OtherType>(), // 若List存在重复元素,指定冲突处理规则,避免默认抛异常 (existing, replacement) -> existing, // 显式指定返回HashMap,和常规循环初始化的Map类型一致 HashMap::new ));
补充说明
- 若源List无重复元素,可省略第三个冲突处理参数
- 若无需指定返回Map的具体实现类,可省略最后一个参数,
toMap默认返回HashMap实例
内容的提问来源于stack exchange,提问作者EnzoG
相关产品推荐
相关产品推荐

