java组织树形结构

1.创建实体树

package com.hontye.parameter.entity.tree;

import com.alibaba.fastjson.JSON;

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


/**
 * tree TODO 
* * @author kangxu2 2017-1-7 * */ public class Tree { /** * 节点ID */ private String itemtype_id; /** * 显示节点文本 */ private String itemtype_name; /** * 节点状态,open closed */ private String state = "open"; /** * 节点是否被选中 true false */ private boolean checked = false; /** * 节点属性 */ private List> attributes; /** * 节点的子节点 */ private List> children = new ArrayList>(); /** * 父ID */ private String parent_itemtypeid; /** * 是否有父节点 */ private boolean isParent = false; /** * 是否有子节点 */ private boolean isChildren = false; public String getItemtype_id() { return itemtype_id; } public void setItemtype_id(String itemtype_id) { this.itemtype_id = itemtype_id; } public String getItemtype_name() { return itemtype_name; } public void setItemtype_name(String itemtype_name) { this.itemtype_name = itemtype_name; } public String getParent_itemtypeid() { return parent_itemtypeid; } public void setParent_itemtypeid(String parent_itemtypeid) { this.parent_itemtypeid = parent_itemtypeid; } public String getState() { return state; } public void setState(String state) { this.state = state; } public boolean isChecked() { return checked; } public void setChecked(boolean checked) { this.checked = checked; } public List> getAttributes() { return attributes; } public void setAttributes(List> attributes) { this.attributes = attributes; } public List> getChildren() { return children; } public void setChildren(List> children) { this.children = children; } public boolean isParent() { return isParent; } public void setParent(boolean isParent) { this.isParent = isParent; } public boolean isChildren() { return isChildren; } public void setChildren(boolean isChildren) { this.isChildren = isChildren; } public Tree(String itemtype_id, String itemtype_name, String state, boolean checked, List> attributes, List> children, boolean isParent, boolean isChildren, String parent_itemtypeid) { super(); this.itemtype_id = itemtype_id; this.itemtype_name = itemtype_name; this.state = state; this.checked = checked; this.attributes = attributes; this.children = children; this.isParent = isParent; this.isChildren = isChildren; this.parent_itemtypeid = parent_itemtypeid; } public Tree() { super(); } @Override public String toString() { return JSON.toJSONString(this); } }

2.构建树

package com.hontye.parameter.entity.tree;


import java.util.ArrayList;
import java.util.List;


/**
 * 构建tree
 * TODO
 * 
* @author kangxu2 2017-1-7 * */ public class BuildTree { /** * * TODO *
* @author kangxu2 2017-1-7 * * @param nodes * @return */ public static Tree build(List> nodes) { if(nodes == null){ return null; } List> topNodes = new ArrayList>(); for (Tree children : nodes) { String pid = children.getParent_itemtypeid(); if (pid == null || "".equals(pid) || pid.equals("0")) { topNodes.add(children); continue; } for (Tree parent : nodes) { String id = parent.getItemtype_id(); if (id != null && id.equals(pid)) { parent.getChildren().add(children); children.setParent(true); parent.setChildren(true); parent.setAttributes(parent.getAttributes()); continue; } } } Tree root = new Tree(); if (topNodes.size() == 1) { root = topNodes.get(0); } else { root.setItemtype_id("-1"); root.setParent_itemtypeid(""); root.setParent(false); root.setChildren(true); root.setChecked(true); root.setChildren(topNodes); root.setItemtype_name("顶级节点"); } return root; } }

3.以上两个类创建好了,就可以编写一个测试类,测试一下

package com.hontye.parameter.entity.tree;


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


public class BuildTreeTester {

    public static void main(String[] args) {
        
        
        List> trees = new ArrayList>();
        List tests = new ArrayList();
        tests.add(new Test("0", "", "关于本人"));
        tests.add(new Test("1", "0", "技术学习"));
        tests.add(new Test("2", "0", "兴趣"));
        tests.add(new Test("3", "1", "JAVA"));
        tests.add(new Test("4", "1", "oracle"));
        tests.add(new Test("5", "1", "spring"));
        tests.add(new Test("6", "1", "springmvc"));
        tests.add(new Test("7", "1", "fastdfs"));
        tests.add(new Test("8", "1", "linux"));
        tests.add(new Test("9", "2", "骑行"));
        tests.add(new Test("10", "2", "吃喝玩乐"));
        tests.add(new Test("11", "2", "学习"));
        tests.add(new Test("12", "3", "String"));
        tests.add(new Test("13", "4", "sql"));
        tests.add(new Test("14", "5", "ioc"));
        tests.add(new Test("15", "5", "aop"));
        tests.add(new Test("16", "1", "等等"));
        tests.add(new Test("17", "2", "等等"));
        tests.add(new Test("18", "3", "等等"));
        tests.add(new Test("19", "4", "等等"));
        tests.add(new Test("20", "5", "等等"));

        for (Test test : tests) {
            Tree tree = new Tree();
            tree.setItemtype_id(test.getId());
            tree.setParent_itemtypeid(test.getPid());
            tree.setItemtype_name(test.getText());
            List> lmp = new ArrayList>();
            Map mp = new HashMap();
            mp.put("COSTDEVICE_NUMBER", "");
            mp.put("PRICE_PER", "");
            mp.put("ORDER_INDEX", "");
            mp.put("ADJUST_DATE", "");
            mp.put("IS_LEAF", "");
            lmp.add(mp);
            tree.setAttributes(lmp);
            trees.add(tree);
        }

        Tree t = BuildTree.build(trees);
        System.out.println(t);
    }
}

class Test {

    private String id;
    private String pid;
    private String text;
    
    private String costdevice_number;
    private String price_per;
    private String order_index;
    private String adjust_date;
    private String is_leaf;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getPid() {
        return pid;
    }

    public void setPid(String pid) {
        this.pid = pid;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public Test(String id, String pid, String text) {
        super();
        this.id = id;
        this.pid = pid;
        this.text = text;
    }
    
    

    public String getCostdevice_number() {
		return costdevice_number;
	}

	public void setCostdevice_number(String costdevice_number) {
		this.costdevice_number = costdevice_number;
	}

	public String getPrice_per() {
		return price_per;
	}

	public void setPrice_per(String price_per) {
		this.price_per = price_per;
	}

	public String getOrder_index() {
		return order_index;
	}

	public void setOrder_index(String order_index) {
		this.order_index = order_index;
	}

	public String getAdjust_date() {
		return adjust_date;
	}

	public void setAdjust_date(String adjust_date) {
		this.adjust_date = adjust_date;
	}

	public String getIs_leaf() {
		return is_leaf;
	}

	public void setIs_leaf(String is_leaf) {
		this.is_leaf = is_leaf;
	}

	public Test() {
        super();
    }

    @Override
    public String toString() {
        return "Test [id=" + id + ", pid=" + pid + ", text=" + text + "]";
    }

}

 4.运行后控制台输出如下:

{"checked":true,"children":[{"attributes":[{"PRICE_PER":"","IS_LEAF":"","ADJUST_DATE":"","COSTDEVICE_NUMBER":"","ORDER_INDEX":""}],"checked":false,"children":[],"itemtype_id":"0","itemtype_name":"关于本人","parent":false,"parent_itemtypeid":"","state":"open"},{"attributes":[{"PRICE_PER":"","IS_LEAF":"","ADJUST_DATE":"","COSTDEVICE_NUMBER":"","ORDER_INDEX":""}],"checked":false,"children":[{"attributes":[{"PRICE_PER":"","IS_LEAF":"","ADJUST_DATE":"","COSTDEVICE_NUMBER":"","ORDER_INDEX":""}],"checked":false,"children":[{"attributes":[{"PRICE_PER":"","IS_LEAF":"","ADJUST_DATE":"","COSTDEVICE_NUMBER":"","ORDER_INDEX":""}],"checked":false,"children":[],"itemtype_id":"12","itemtype_name":"String","parent":true,"parent_itemtypeid":"3","state":"open"},{"attributes":[{"PRICE_PER":"","IS_LEAF":"","ADJUST_DATE":"","COSTDEVICE_NUMBER":"","ORDER_INDEX":""}],"checked":false,"children":[],"itemtype_id":"18","itemtype_name":"等等","parent":true,"parent_itemtypeid":"3","state":"open"}],"itemtype_id":"3","itemtype_name":"JAVA","parent":true,"parent_itemtypeid":"1","state":"open"},{"attributes":[{"PRICE_PER":"","IS_LEAF":"","ADJUST_DATE":"","COSTDEVICE_NUMBER":"","ORDER_INDEX":""}],"checked":false,"children":[{"attributes":[{"PRICE_PER":"","IS_LEAF":"","ADJUST_DATE":"","COSTDEVICE_NUMBER":"","ORDER_INDEX":""}],"checked":false,"children":[],"itemtype_id":"13","itemtype_name":"sql","parent":true,"parent_itemtypeid":"4","state":"open"},{"attributes":[{"PRICE_PER":"","IS_LEAF":"","ADJUST_DATE":"","COSTDEVICE_NUMBER":"","ORDER_INDEX":""}],"checked":false,"children":[],"itemtype_id":"19","itemtype_name":"等等","parent":true,"parent_itemtypeid":"4","state":"open"}],"itemtype_id":"4","itemtype_name":"oracle","parent":true,"parent_itemtypeid":"1","state":"open"},{"attributes":[{"PRICE_PER":"","IS_LEAF":"","ADJUST_DATE":"","COSTDEVICE_NUMBER":"","ORDER_INDEX":""}],"checked":false,"children":[{"attributes":[{"PRICE_PER":"","IS_LEAF":"","ADJUST_DATE":"","COSTDEVICE_NUMBER":"","ORDER_INDEX":""}],"checked":false,"children":[],"itemtype_id":"14","itemtype_name":"ioc","parent":true,"parent_itemtypeid":"5","state":"open"},{"attributes":[{"PRICE_PER":"","IS_LEAF":"","ADJUST_DATE":"","COSTDEVICE_NUMBER":"","ORDER_INDEX":""}],"checked":false,"children":[],"itemtype_id":"15","itemtype_name":"aop","parent":true,"parent_itemtypeid":"5","state":"open"},{"attributes":[{"PRICE_PER":"","IS_LEAF":"","ADJUST_DATE":"","COSTDEVICE_NUMBER":"","ORDER_INDEX":""}],"checked":false,"children":[],"itemtype_id":"20","itemtype_name":"等等","parent":true,"parent_itemtypeid":"5","state":"open"}],"itemtype_id":"5","itemtype_name":"spring","parent":true,"parent_itemtypeid":"1","state":"open"},{"attributes":[{"PRICE_PER":"","IS_LEAF":"","ADJUST_DATE":"","COSTDEVICE_NUMBER":"","ORDER_INDEX":""}],"checked":false,"children":[],"itemtype_id":"6","itemtype_name":"springmvc","parent":true,"parent_itemtypeid":"1","state":"open"},{"attributes":[{"PRICE_PER":"","IS_LEAF":"","ADJUST_DATE":"","COSTDEVICE_NUMBER":"","ORDER_INDEX":""}],"checked":false,"children":[],"itemtype_id":"7","itemtype_name":"fastdfs","parent":true,"parent_itemtypeid":"1","state":"open"},{"attributes":[{"PRICE_PER":"","IS_LEAF":"","ADJUST_DATE":"","COSTDEVICE_NUMBER":"","ORDER_INDEX":""}],"checked":false,"children":[],"itemtype_id":"8","itemtype_name":"linux","parent":true,"parent_itemtypeid":"1","state":"open"},{"attributes":[{"PRICE_PER":"","IS_LEAF":"","ADJUST_DATE":"","COSTDEVICE_NUMBER":"","ORDER_INDEX":""}],"checked":false,"children":[],"itemtype_id":"16","itemtype_name":"等等","parent":true,"parent_itemtypeid":"1","state":"open"}],"itemtype_id":"1","itemtype_name":"技术学习","parent":false,"parent_itemtypeid":"0","state":"open"},{"attributes":[{"PRICE_PER":"","IS_LEAF":"","ADJUST_DATE":"","COSTDEVICE_NUMBER":"","ORDER_INDEX":""}],"checked":false,"children":[{"attributes":[{"PRICE_PER":"","IS_LEAF":"","ADJUST_DATE":"","COSTDEVICE_NUMBER":"","ORDER_INDEX":""}],"checked":false,"children":[],"itemtype_id":"9","itemtype_name":"骑行","parent":true,"parent_itemtypeid":"2","state":"open"},{"attributes":[{"PRICE_PER":"","IS_LEAF":"","ADJUST_DATE":"","COSTDEVICE_NUMBER":"","ORDER_INDEX":""}],"checked":false,"children":[],"itemtype_id":"10","itemtype_name":"吃喝玩乐","parent":true,"parent_itemtypeid":"2","state":"open"},{"attributes":[{"PRICE_PER":"","IS_LEAF":"","ADJUST_DATE":"","COSTDEVICE_NUMBER":"","ORDER_INDEX":""}],"checked":false,"children":[],"itemtype_id":"11","itemtype_name":"学习","parent":true,"parent_itemtypeid":"2","state":"open"},{"attributes":[{"PRICE_PER":"","IS_LEAF":"","ADJUST_DATE":"","COSTDEVICE_NUMBER":"","ORDER_INDEX":""}],"checked":false,"children":[],"itemtype_id":"17","itemtype_name":"等等","parent":true,"parent_itemtypeid":"2","state":"open"}],"itemtype_id":"2","itemtype_name":"兴趣","parent":false,"parent_itemtypeid":"0","state":"open"}],"itemtype_id":"-1","itemtype_name":"顶级节点","parent":false,"parent_itemtypeid":"","state":"open"}

树形结构创建成功。

5.得到树形结构后,通过.toString()得到String字符串,再通过net.sf.json.JSONObject.fromObject(String string)获取到JsonObject对象做业务处理。如下: 

net.sf.json.JSONObject jsonObject = net.sf.json.JSONObject.fromObject(costDeviceTree.toString());
                

 

你可能感兴趣的:(程序)