将无序的数据数组集合转化为有序的树形数组集合,这种工具使用范围:针对表中有上下级关系,pid,sortindex
1.[代码]JTree.java
//
// Copyright 2014 All Rights Reserved //
//
/* =======================================================================
* 系统名 :
* 子系统名 :
* Class名 : JTree.java
* 概要 : 将无序的数据数组集合转化为有序的树形数组集合,这种工具使用范围:针对表中有上下级关系,pid,sortindex
* 改版履历 :
* 版本 日期 作者名 备注
* 1.0.0 2015年10月23日 郭恩洲 初次作成
* ======================================================================= */
package com.common;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
public class JTree {
private List> initBeans = new ArrayList>();
private String sign = "-";
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
/**
* @param isSort 是否排序,如果你列表是有序的,建立false,提供性能
* @param rootId 根节点
* @return
*/
public List> start(Boolean isSort, Serializable rootId) {
if(rootId == null){
rootId = "";
}
List> arrayBeans = new ArrayList>();
JTreeNode treeRoot = getTree(initBeans, isSort, rootId);
List> treeList = treeRoot.getChildren();
return treeConvertList(treeList, 1, arrayBeans);
}
public JTreeNode getTree(List> beans, boolean isSort,
Serializable rootId) {
List> sortBeans = beans;
if (isSort) {
sortBeans = sort(beans);
}
JTreeNode treeRoot = tree(sortBeans, rootId, null);
return treeRoot;
}
/**
* 采用冒泡对数组集合进行排序
*
* @param beans
* @return
*/
private List> sort(List> beans) {
JTreeNode temp;
int size = beans.size();
for (int i = 0; i < size - 1; i++) {
for (int j = i + 1; j < size; j++) {
if (beans.get(i).getSortId() > beans.get(j).getSortId()) {
temp = beans.get(i);
beans.set(i, beans.get(j));
beans.set(j, temp);
}
}
}
return beans;
}
/**
* 采用递归对数组集合合并树形结构集合
*
* @param beans
* @param parentId
* @param root
* @return
*/
private JTreeNode tree(List> beans, Serializable parentId,JTreeNode root) {
if (root == null) {
root = new JTreeNode();
root.setId(parentId);
}
for (int i = 0; i < beans.size(); i++) {
JTreeNode bean = beans.get(i);
Serializable pid = bean.getParentId();
if(pid == null){
pid = "";
}
if (pid.equals(root.getId())) {
JTreeNode nodeBean = tree(beans, bean.getId(), bean);
root.getChildren().add(nodeBean);
}
}
return root;
}
/**
* 采用递归将树形集合转化成数组集合结构
*
* @param tree
* @param num
* @return
*/
public List> treeConvertList(List> tree, int num,
List> arrayBeans) {
for (JTreeNode bean : tree) {
String sign ="";
for (int i = 1; i < num; i++) {
sign+=this.getSign();
}
bean.setNum(num);
bean.setSign(sign);
arrayBeans.add(bean);
List> ChildrenList = bean.getChildren();
if (!ChildrenList.isEmpty()) {
int a = num + 1;
treeConvertList(ChildrenList, a, arrayBeans);
}
}
return arrayBeans;
}
public void add(Serializable id, Serializable pid, int sortIndex,M data) {
initBeans.add(new JTreeNode(id, pid, sortIndex, data));
}
public static void main(String[] args) {
JTree jtree = new JTree();
jtree.setSign("++");
jtree.add("1", null, 7, "系统管理");
jtree.add("2", null, 6, "帮助中心");
jtree.add("3","2", 5, "接口规范");
jtree.add("4", "1", 4, "首页1");
jtree.add("5", "4", 4, "首页2");
jtree.add("6", "3", 4, "首页3");
List> list = jtree.start(true, null);
}
}
2.[代码]JTreeNode
//
// Copyright 2014 All Rights Reserved //
//
/* =======================================================================
* 系统名 :
* 子系统名 :
* Class名 : JTreeNode.java
* 概要 :
* 改版履历 :
* 版本 日期 作者名 备注
* 1.0.0 2015年10月23日 郭恩洲 初次作成
* ======================================================================= */
package com.common;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
public class JTreeNode {
private Serializable id;
private Serializable parentId;
private int sortId;
private int num;
private String sign;
private M data;
private List> children = new ArrayList>();
public JTreeNode() {
super();
}
public JTreeNode(Serializable id, Serializable parentId, int sortId, M obj) {
this.id = id;
this.sortId = sortId;
this.parentId = parentId;
this.data = obj;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
public M getData() {
return data;
}
public void setData(M data) {
this.data = data;
}
public Serializable getId() {
return id;
}
public void setId(Serializable id) {
this.id = id;
}
public Serializable getParentId() {
return parentId;
}
public void setParentId(Serializable parentId) {
this.parentId = parentId;
}
public int getSortId() {
return sortId;
}
public void setSortId(int sortId) {
this.sortId = sortId;
}
public void setParentId(String parentId) {
this.parentId = parentId;
}
public List> getChildren() {
return children;
}
public void setChildren(List> children) {
this.children = children;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}