创建节点类
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* @author cnxjk
* @create TreeNode date 2021/11/14 9:17 上午
**/
@Data
public class TreeNode {
protected int id;
protected int parentId;
protected String name;
protected List<TreeNode> children = new ArrayList<TreeNode>();
public void add(TreeNode node) {
children.add(node);
}
}
Tree算法工具类
import lombok.experimental.UtilityClass;
import java.util.ArrayList;
import java.util.List;
/**
* @author cnxjk
* @create TreeUtil date 2021/11/14 9:09 上午
**/
@UtilityClass
public class TreeUtil {
/**
* 两层循环实现建树
*
* @param treeNodes 传入的树节点列表
* @return
*/
public <T extends TreeNode> List<T> bulid(List<T> treeNodes, Object root) {
List<T> trees = new ArrayList<>();
for (T treeNode : treeNodes) {
if (root.equals(treeNode.getParentId())) {
trees.add(treeNode);
}
for (T it : treeNodes) {
if (it.getParentId() == treeNode.getId()) {
if (treeNode.getChildren() == null) {
treeNode.setChildren(new ArrayList<>());
}
treeNode.add(it);
}
}
}
return trees;
}
/**
* 使用递归方法建树
*
* @param treeNodes
* @return
*/
public <T extends TreeNode> List<T> buildByRecursive(List<T> treeNodes, Object root) {
List<T> trees = new ArrayList<T>();
for (T treeNode : treeNodes) {
if (root.equals(treeNode.getParentId())) {
trees.add(findChildren(treeNode, treeNodes));
}
}
return trees;
}
/**
* 递归查找子节点
*
* @param treeNodes
* @return
*/
public <T extends TreeNode> T findChildren(T treeNode, List<T> treeNodes) {
for (T it : treeNodes) {
if (treeNode.getId() == it.getParentId()) {
if (treeNode.getChildren() == null) {
treeNode.setChildren(new ArrayList<>());
}
treeNode.add(findChildren(it, treeNodes));
}
}
return treeNode;
}
}
tree业务Bean
/**
* @author cnxjk
* @create BusDeptTree date 2021/11/14 9:21 上午
**/
@Data
@EqualsAndHashCode(callSuper = true)
public class BusDeptTree extends TreeNode {
private String name;
}
业务实现类
@Override
public List<BusDeptTree> treeNode() {
QueryWrapper<BusDept> wrapper = new QueryWrapper<>();
wrapper.eq("del_flag", 0);
List<BusDept> depts = super.list(wrapper);
List<BusDeptTree> treeList = depts.stream()
.filter(dept -> !dept.getDeptId().equals(dept.getParentId()))
.map(dept -> {
BusDeptTree node = new BusDeptTree();
node.setId(dept.getDeptId());
node.setParentId(dept.getParentId());
node.setName(dept.getName());
return node;
}).collect(Collectors.toList());
return TreeUtil.bulid(treeList, -1);
}
参考博客:悠悠一小生
浙公网安备 33010602011771号