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

如何将JSON数组转换为Map<String, Map<String, List<SalaryMapper>>>格式

实现二级分组:Map<String, Map<String, List>>

问题背景

给定如下修正语法后的JSON数据:

[
    {
        "contracted": 1,
        "payrolltype": "basicsalary",
        "otherdata": "sampledata",
        "salary": 1000
    },
    {
        "contracted": 1,
        "payrolltype": "basicsalary",
        "otherdata": "sampledata",
        "salary": 1001
    },
    {
        "contracted": 2,
        "payrolltype": "basicsalary",
        "otherdata": "sampledata",
        "salary": 10002
    },
    {
        "contracted": 1,
        "payrolltype": "addon",
        "otherdata": "sampledata",
        "salary": 1004
    }
]

需要将其转换为Map<String, Map<String, List<SalaryMapper>>>结构,即先按contractId分组,再对每组内的数据按payrollType二次分组。


方案一:直接用Stream多级分组(推荐)

无需先做一次分组再遍历,通过嵌套Collectors.groupingBy一步完成二级分组,代码简洁高效:

List<SalaryMapper> salMap = myArray;
Map<String, Map<String, List<SalaryMapper>>> result = salMap.stream()
    // 第一级分组:按contractId作为外层Map的key
    .collect(Collectors.groupingBy(
        SalaryMapper::getContractId,
        // 第二级分组:对每组内的数据按payrollType作为内层Map的key
        Collectors.groupingBy(SalaryMapper::getPayrollType)
    ));

外层Map的key为contractId,内层Map的key为payrollType,对应的值是同一contractId和payrollType下的SalaryMapper列表。


方案二:基于已有分组结果遍历处理

如果已完成按contractId的一级分组,可通过遍历完善二级分组逻辑,注意要正确初始化目标Map避免空指针:

// 假设已完成一级分组的map
Map<String, List<SalaryMapper>> map = salMap.stream().collect(Collectors.groupingBy(SalaryMapper::getContractId));

// 初始化目标二级分组Map,不能为null
Map<String, Map<String, List<SalaryMapper>>> subMap = new HashMap<>();

for (Map.Entry<String, List<SalaryMapper>> entry : map.entrySet()) {
    String contractId = entry.getKey();
    List<SalaryMapper> salaryList = entry.getValue();
    
    // 对当前contractId下的列表按payrollType分组
    Map<String, List<SalaryMapper>> payrollGroup = salaryList.stream()
        .collect(Collectors.groupingBy(SalaryMapper::getPayrollType));
    
    // 将二级分组结果存入目标Map
    subMap.put(contractId, payrollGroup);
}

return subMap;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:00:46