1.Tree树形结构
package com.gzhj.common.tree;
/**
* 类名称:Tree
* 类描述:树形结构
* @author oql
* @date 2022-07-20
*/
public class Tree {
/**
* 根据点
* */
private String id;
/**
* 父节点
* */
private String parentId;
/**
* 名称
* */
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getParentId() {
return parentId;
}
public void setParentId(String parentId) {
this.parentId = parentId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Tree{" +
"id='" + id + '\'' +
", parentId='" + parentId + '\'' +
", name='" + name + '\'' +
'}';
}
}
2. 递归构造树型结构Util
package com.gzhj.common.tree;
import com.jfinal.kit.StrKit;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* 类名称:TreeUtil
* 类描述:递归构造树型结构
* @author oql
* @date 2022-07-20
*/
public class TreeUtil {
public List<Tree> menuCommon;
public List<Object> parentList = new ArrayList<Object>();
public List<Object> menuList(List<Tree> menu,String parentId){
this.menuCommon = menu;
for (Tree tree : menu) {
if(tree == null){
continue;
}
Map<String,Object> mapArr = new LinkedHashMap<String, Object>();
if(StrKit.notBlank(parentId) && parentId.equals(tree.getParentId())){
this.setList(mapArr,tree,parentList);
}
}
return parentList;
}
public List<?> menuChild(String id){
List<Object> childList = new ArrayList<Object>();
for(Tree tree:menuCommon){
if(tree == null){
continue;
}
Map<String,Object> childArray = new LinkedHashMap<String, Object>();
//剔除子节点与父节点相同的错误异常数据
if(tree.getParentId() != null && tree.getParentId().equals(tree.getId())){
continue;
}
if(tree.getParentId() != null && tree.getParentId().equals(id)){
this.setList(childArray,tree,childList);
}
}
return childList;
}
/**
* 设置树形结构的值
* @author oql
* @date 2022-07-20
*/
private void setList(Map<String,Object> map,Tree tree,List<Object> list){
map.put("id", tree.getId());
map.put("name", tree.getName());
map.put("parentId", tree.getParentId());
map.put("childList", menuChild(tree.getId()));
list.add(map);
}
}
3.main测试
public static void main(String[] args){
List<Tree> treeList = new ArrayList<>();
Tree tr1 = new Tree();
tr1.setId("01");
tr1.setParentId("0");
tr1.setName("顶级");
treeList.add(tr1);
Tree tr2 = new Tree();
tr2.setId("0101");
tr2.setParentId("01");
tr2.setName("二级");
treeList.add(tr2);
Tree tr3 = new Tree();
tr3.setId("0102");
tr3.setParentId("01");
tr3.setName("二级");
treeList.add(tr3);
Tree tr4 = new Tree();
tr4.setId("010101");
tr4.setParentId("0101");
tr4.setName("三级");
treeList.add(tr4);
TreeUtil util = new TreeUtil();
List<Object> objects = util.menuList(treeList, "0");
System.out.println(objects.toString());
}