参考文章,十分感谢
http://blog.csdn.net/massivestars/article/details/53911620
实体类
import java.util.List;
public class Resource implements Comparable<Resource> {
/**
* 主键ID
*/
private String id;
/**
* 父ID
*/
private String pId;
/**
* 名称
*/
private String name;
/**
* 第几级
*/
private Integer leaf;
/**
* 排序
*/
private Integer sno;
/**
* 子权限
*/
private List<Resource> children;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id == null ? null : id.trim();
}
public String getpId() {
return pId;
}
public void setpId(String pId) {
this.pId = pId == null ? null : pId.trim();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public Integer getLeaf() {
return leaf;
}
public void setLeaf(Integer leaf) {
this.leaf = leaf;
}
public Integer getSno() {
return sno;
}
public void setSno(Integer sno) {
this.sno = sno;
}
public List<Resource> getChildren() {
return children;
}
public void setChildren(List<Resource> children) {
this.children = children;
}
@Override
public int compareTo(Resource o) {
// 先根据节点排序,再根据排序号排序
int i = this.getLeaf() - o.getLeaf();
if (i == 0) {
i = this.getSno() - o.getSno();
}
return i;
}
}
list 转 tree 方法(两层循环实现建树 )
public List<Resource> bulid(List<Resource> resources) {
List<Resource> trees = new ArrayList<Resource>();
for (Resource treeNode : resources) {
for (Resource it : resources) {
if (it.getpId().equals(treeNode.getId())) {
if (treeNode.getChildren() == null) {
treeNode.setChildren(new ArrayList<Resource>());
}
treeNode.getChildren().add(it);
// 排序
Collections.sort(treeNode.getChildren());
}
}
}
// 排序
Collections.sort(trees);
return trees;
}