treetable的后台算法

阅读更多

treetable是jquery的树表控件,如:

 



  
	
    treeTable 静态测试
	
	
	    
	
	
	
	
	
	
	
	
	
	
	
	
	
  
  
  
    
标题 链接 排序 可见 权限标识 操作
系统设置 顶级内容 显示 运营者(1) 修改 删除 添加下级菜单 
机构用户 内容1 显示 运营者(1) 修改 删除 添加下级菜单 
用户管理 内容1-1 显示 运营者(1) 修改 删除 添加下级菜单 
用户管理下的 内容1-1-1 显示 运营者(1) 修改 删除 添加下级菜单 
机构管理 内容1-1 显示 运营者(1) 修改 删除 添加下级菜单 
区域管理 内容1-1 显示 运营者(1) 修改 删除 添加下级菜单 

 效果如下:

 



 

难点在于拼装出理想的数据结构来适应前端的展示。下面模拟从数据库查询出结果并拼装出treetable数据结构的过程(需运用到递归):

 

package com.test;

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


public class Test {

	/**
	 * map1
	 *  |----map3
	 *     |----map6
	 *  |----map4
	 * map2
	 *  |----map5
	 */
	public static void main(String[] args) {
		//模拟查询库然后组装成树的结构
        List list = new ArrayList();
        Map map1 = new HashMap();
        map1.put("id", "1");
        map1.put("parent_id", "0");
        list.add(map1);

        Map map2 = new HashMap();
        map2.put("id", "2");
        map2.put("parent_id", "0");
        list.add(map2);

        Map map3 = new HashMap();
        map3.put("id", "3");
        map3.put("parent_id", "1");
        list.add(map3);

        Map map4 = new HashMap();
        map4.put("id", "4");
        map4.put("parent_id", "1");
        list.add(map4);

        Map map5 = new HashMap();
        map5.put("id", "5");
        map5.put("parent_id", "2");
        list.add(map5);

        Map map6 = new HashMap();
        map6.put("id", "6");
        map6.put("parent_id", "3");
        list.add(map6);

        List list1 = new ArrayList();
        
        List> trees = new ArrayList>();
        for (Map map : list) {
        	Map tree = new HashMap();
            if (map.get("parent_id").equals("0")) {
                map.put("text", map.get("id"));
                map.put("parent_text", "0");
                
                tree.put("id_text", (String)map.get("id"));
                tree.put("parent_text", "0");
                trees.add(tree);
                
                list1.add(map);
                
                List trees2 = getTreeData(trees, list, map);
                map.put("list", trees2);
            }
        }
//        for (Map map : list1) {
//        	
//        }
        System.out.println(list1);
        
        System.out.println("trees:" + trees);
    }

    private static List getTreeData(List> trees, List list, Map maps) {
        List list5 = new ArrayList();
        for (Map map : list) {
            if (maps.get("id").equals(map.get("parent_id"))) {
                map.put("text", maps.get("text") + "_" + map.get("id"));
                map.put("parent_text", maps.get("text"));
                list5.add(map);
                
                Map tree = new HashMap();
                tree.put("id_text", maps.get("text") + "_" + map.get("id"));
                tree.put("parent_text", (String)maps.get("text"));
                trees.add(tree);
                
                map.put("list", getTreeData(trees, list, map));
            }
        }
        return list5;
    }
	
    public static String  print(String name) {
    	return "Hi, " + name;
    }
}

 

 

运行结果:

[{id=1, text=1, list=[{id=3, text=1_3, list=[{id=6, text=1_3_6, list=[], parent_text=1_3, parent_id=3}], parent_text=1, parent_id=1}, {id=4, text=1_4, list=[], parent_text=1, parent_id=1}], parent_text=0, parent_id=0}, {id=2, text=2, list=[{id=5, text=2_5, list=[], parent_text=2, parent_id=2}], parent_text=0, parent_id=0}]

 

trees:[{id_text=1, parent_text=0}, {id_text=1_3, parent_text=1}, {id_text=1_3_6, parent_text=1_3}, {id_text=1_4, parent_text=1}, {id_text=2, parent_text=0}, {id_text=2_5, parent_text=2}]

 

  • treetable的后台算法_第1张图片
  • 大小: 7.1 KB
  • 查看图片附件

你可能感兴趣的:(treetable,算法,递归)