You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Lambda将List<SomeClass>转换为Map<SomeClass::getField1, Set<SomeClass::getField2>>?

用Lambda实现List转Map<String, Set>

直接借助Java Stream的Collectors.groupingBy结合下游收集器就能完成需求,核心逻辑是按field1分组,同时将每组对应的field2值收集到Set中:

// 假设已有List<SomeClass>实例
List<SomeClass> someClassList = new ArrayList<>();

// 转换代码
Map<String, Set<String>> field1ToField2SetMap = someClassList.stream()
    .collect(Collectors.groupingBy(
        SomeClass::getField1,  // 分组依据:取field1的值作为Map的key
        Collectors.mapping(    // 将每个SomeClass对象转换为对应的field2值
            SomeClass::getField2,
            Collectors.toSet() // 把转换后的field2值收集成Set作为Map的value
        )
    ));

额外说明

  • 要是需要保留field2的插入顺序,可以把Collectors.toSet()替换为Collectors.toCollection(LinkedHashSet::new),这样得到的Set会维持元素添加的先后顺序。
  • 如果原列表为空,转换后的Map也会是空集合,无需额外处理空指针场景。

内容的提问来源于stack exchange,提问作者Jared

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 15:03:11