Map的形式,树形结构

这段代码展示了如何将JSON字符串解析为Map对象列表,并构造一个以部门ID为键,包含父ID和部门名称的HashMap。最终调用getThree方法构建三层结构的组织部门。

public void testDept(){
String jsonStr="[{\n" +
“\t"name”: “财务部”,\n" +
“\t"id”: 2,\n" +
“\t"parentid”: 1,\n" +
“\t"order”: 99998500\n" +
“}, {\n” +
“\t"name”: “人力资源部”,\n" +
“\t"id”: 9,\n" +
“\t"parentid”: 1,\n" +
“\t"order”: 99998250\n" +
“}, {\n” +
“\t"name”: “销售部”,\n" +
“\t"id”: 10,\n" +
“\t"parentid”: 1,\n" +
“\t"order”: 99998611\n" +
“}, {\n” +
“\t"name”: “客户服务部”,\n" +
“\t"id”: 11,\n" +
“\t"parentid”: 224,\n" +
“\t"order”: 100001000\n" +
“}, {\n” +
“\t"name”: “研发部”,\n" +
“\t"id”: 14,\n" +
“\t"parentid”: 1,\n" +
“\t"order”: 99998625\n" +
“}, {\n” +
“\t"name”: “实施部”,\n" +
“\t"id”: 16,\n" +
“\t"parentid”: 224,\n" +
“\t"order”: 100002000\n" +
“}, {\n” +
“\t"name”: “北有限公司”,\n" +
“\t"id”: 1,\n" +
“\t"parentid”: 0,\n" +
“\t"order”: 100000000\n" +
“},{\n” +
“\t"name”: “服务中心”,\n" +
“\t"id”: 224,\n" +
“\t"parentid”: 1,\n" +
“\t"order”: 99998597\n" +
“}]”;
List maps = JSONArray.parseArray(jsonStr, Map.class);
HashMap<Integer, Map<String, Object>> map = new HashMap<>();
for (Map map2:maps) {
String name = (String) map2.get(“name”);
HashMap<String, Object> map1 = new HashMap<>();
map1.put(“pid”,map2.get(“parentid”));
map1.put(“dept_name”,name);
map1.put(“name_index”,name);
map.put((Integer) map2.get(“id”),map1);
}
Map three = getThree(map,1);
System.out.println(three);

}
private static Map getThree(Map map,int parentId){
    //获取所有子节点
    Map childTree = getChildTree(map, parentId);
    Iterator iterator = childTree.keySet().iterator();
    while (iterator.hasNext()){
        getChildTree(childTree,(Integer) iterator.next());
    }
    return map;
}

private static Map getChildTree(Map map,int id){
    Iterator iterator = map.keySet().iterator();
    while (iterator.hasNext()){
        Map map1 = (Map)map.get(iterator.next());
        if(Integer.parseInt(map1.get("pid").toString())==id){
            map1.put("name_index", ((Map)map.get(id)).get("name_index")+">"+map1.get("dept_name"));
        }
    }
    return map;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值