往往要将数据库中的菜单配置转成树形结构展示到前台,这边提供一种二维树组转树形(同事那边看来的,很好用),以供参考:
数据库 id,name,parent_id
java对象:
Java代码
privateclassTreeNode{
privateString id;
privateString name;
privateString parentId;
privateList children;
// TODO getter/setter
}private class TreeNode{
private String id;
private String name;
private String parentId;
private List children;
// TODO getter/setter
}
树构造代码如下:
Java代码
List menuList = xxManager.findAllMenu();
List nodeList =newArrayList();
for(TreeNode node1 : menuList){
booleanmark =false;
for(TreeNode node2 : menuList){
if(node1.getParentId()!=null&& node1.getParentId().equals(node2.getId())){
mark =true;
if(node2.getChildren() ==null)
node2.setChildren(newArrayList());
node2.getChildren().add(node1);
break;
}
}
if(!mark){
nodeList.add(node1);
}
}
//转为json格式
String json = JSONArray.fromObject(nodeList).toString();
System.out.println("json:"+json);List menuList = xxManager.findAllMenu();
List nodeList = new ArrayList();
for(TreeNode node1 : menuList){
boolean mark = false;
for(TreeNode node2 : menuList){
if(node1.getParentId()!=null && node1.getParentId().equals(node2.getId())){
mark = true;
if(node2.getChildren() == null)
node2.setChildren(new ArrayList());
node2.getChildren().add(node1);
break;
}
}
if(!mark){
nodeList.add(node1);
}
}
//转为json格式
String json = JSONArray.fromObject(nodeList).toString();
System.out.println("json:"+json);
原理如下图了: