不是重点,可以忽略: 本人 七月的胜利。代表七月份我出生啦,嘻嘻
博客就是平常记录一些常用到的开发常用到的技术,方法等,看见好东西了就自己整理一下防止以后自己遇到了再找不到。
如果有幸帮到你,欢迎点个赞,写个评论。Thank you
根据根目录查询下面的所有子目录
主要步骤:
1,首先从菜单数据中获取所有根节点。
2,为根节点建立次级子树并拼接上。
3,递归为子节点建立次级子树并接上,直至为末端节点拼接上空的“树”。
实体类
package com.xqd.demo.entity;
import java.io.Serializable;
import java.util.List;
/**
* @ClassName: User
* @Description: TODO
* @Authror: XQD
* @Date: 2020/5/14 14:27
*/
public class User implements Serializable {
private String id;
private String pid;
private String name;
private List<User> userList;
public User(String id, String pid, String name) {
this.id = id;
this.pid = pid;
this.name = name;
}
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 getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<User> getUserList() {
return userList;
}
public void setUserList(List<User> userList) {
this.userList = userList;
}
@Override
public String toString() {
return "User{" +
"id='" + id + '\'' +
", pid='" + pid + '\'' +
", name='" + name + '\'' +
", userList=" + userList +
'}';
}
}
生成树形工具类
可以根据业务更改根节点
package com.xqd.demo.utils;
import com.xqd.demo.entity.User;
import java.util.ArrayList;
import java.util.List;
/**
* @ClassName: TreeUtil
* @Description: TODO
* @Authror: XQD
* @Date: 2020/5/14 14:25
*/
public class TreeUtil {
private List<User> userList = new ArrayList<>();
public TreeUtil(List<User> userList) {
this.userList = userList;
}
//创建树形结构
public List<User> builTree(){
List<User> list = new ArrayList<>();
for (User user:getRootNode()) {
user = buildChilTree(user);
list.add(user);
}
return list;
}
//递归,建立子树形结构
private User buildChilTree(User puser){
List<User> list = new ArrayList<>();
for (User user:userList) {
if (user.getPid().equals(puser.getId())){
list.add(buildChilTree(user));
}
}
puser.setUserList(list);
return puser;
}
//获取根节点
private List<User> getRootNode(){
List<User> list = new ArrayList<>();
for (User user:userList) {
if (user.getPid().equals("0")){
list.add(user);
}
}
return list;
}
}
package com.xqd.demo;
import com.xqd.demo.entity.User;
import com.xqd.demo.utils.JsonUtil;
import com.xqd.demo.utils.TreeUtil;
import java.util.ArrayList;
import java.util.List;
/**
* @ClassName: TreeDemo
* @Description: TODO
* @Authror: XQD
* @Date: 2020/5/14 14:38
*/
public class TreeDemo {
public static void main(String[] args) {
List<User> users = new ArrayList<>();
users.add(new User("1","0","AAA"));
users.add(new User("2","1","BBB"));
users.add(new User("3","1","CCC"));
users.add(new User("4","2","DDD"));
users.add(new User("5","2","EEE"));
users.add(new User("6","3","FFF"));
users.add(new User("7","1","GGG"));
users.add(new User("8","7","HHH"));
users.add(new User("9","6","III"));
users.add(new User("10","1","JJJ"));
users.add(new User("11","7","KKK"));
//创建树
TreeUtil treeUtil = new TreeUtil(users);
users = treeUtil.builTree();
System.out.println(users);
}
}
根据子目录查询根目录
代码涉及有点杂,说一下思路吧。
根据子目录查询所有的父级,或者查询到那一个父级。只要能查出来所有父级,需要明确到那层就好说啦。
1,根据子目录id查询子目录的对象
2,用查出来的对象的父目录pid当成子目录id继续查。就是一个循环,但是用for,while是不行的,需要用递归,自己调用自己,一直查到pid等于0的,存到集合中就可以。
就类似这样的