HashMap的list转树列表json工具方法

如代码

package com.lingan.jldbs.supervisor.plan.service.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.HashMap;
import java.util.Map;

public class TreeUtil {
    
    public static ArrayList ToTree(List table, String childrenField, String idField, String parentIdField){
    	ArrayList tree = new ArrayList();

        Map hash = new HashMap();
        for (int i = 0, l = table.size(); i < l; i++)
        {
            Map t = (Map)table.get(i);
            hash.put(t.get(idField), t);
        }
  
        for (int i = 0, l = table.size(); i < l; i++)
        {
            Map t = (Map)table.get(i);
            Object parentID = t.get(parentIdField);
            if (parentID == null || parentID.toString().equals("-1"))   
            {
                tree.add(t);
                continue;
            }
            Map parent = (Map)hash.get(parentID);
            if (parent == null)    
            {
                tree.add(t);
                continue;
            }
            List children = (List)parent.get(childrenField);
            if (children == null)
            {
                children = new ArrayList();
                parent.put(childrenField, children);
            }
            children.add(t);
        }
        
        SyncTreeNodes(tree, 1, "", childrenField);
        
        return tree;
    }
    private static void SyncTreeNodes(ArrayList nodes, int outlineLevel, String outlineNumber, String childrenField)
    {
        for (int i = 0, l = nodes.size(); i < l; i++)
        {
            HashMap node = (HashMap)nodes.get(i);

            node.put("OutlineLevel", outlineLevel);
            node.put("OutlineNumber", outlineNumber + (i + 1));            

            ArrayList childNodes = (ArrayList)node.get(childrenField);

            if (childNodes != null && childNodes.size() > 0)
            {
                SyncTreeNodes(childNodes, outlineLevel + 1, node.get("OutlineNumber").toString() + ".",  childrenField);
            }
        }
    }    

    public static ArrayList ToList(List tree, String parentId, String childrenField, String idField, String parentIdField){
    	return ToList(tree, parentId, childrenField, idField, parentIdField, true);
	}
    
    public static ArrayList ToList(List tree, String parentId, String childrenField, String idField, String parentIdField, boolean removeChildren){
    	ArrayList list = new ArrayList();
        for (int i = 0, len = tree.size(); i < len; i++)
        {
            Map task = (Map)tree.get(i);

            task.put(parentIdField, parentId);

            list.add(task);

            List children = (List)task.get(childrenField);

            if (children != null && children.size() > 0)
            {
                List list2 = ToList(children, task.get(idField).toString(), childrenField, idField, parentIdField);
                list.addAll(list2);
            }
            if(removeChildren){
            	task.remove(childrenField);
            }
        }
        return list;
    }
}

传入方法如下

	
	/** 
	 * 加载计划数据
	 */
	@Override
	public String LoadProject(Map<String, Object> param){
		String projectId = (String)param.get("projectId");
		LaJlItem item = selectProject(projectId);
		if(item == null){
			return "未找到项目";
		}
        HashMap<String,Object> project = new HashMap<String,Object>();
        project.put("UID", item.getId());
        project.put("CalendarUID",1);
        project.put("Name",item.getName());
        project.put("StartDate",item.getStartDate());
        project.put("FinishDate",item.getFinishDate());
        project.put("LastSaved",item.getLastSaved());     
        project.put("Calendars",JSON.Decode(item.getCalendars()));	       
        //任务
        List<Map<String, Object>> tasks = selectTasks(param);
        //任务总数
        project.put("taskCount", tasks.size());
        //列表转树形
        tasks = TreeUtil.ToTree(tasks, "children", "UID", "ParentTaskUID");	        
        project.put("Tasks", tasks);                	        
        //获取统计值
        String json = PluSoft.Data.Project.Encode(project);
        return json;
	}

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值