TreeUtil
package com.shop.prise.common.utils;
import com.shop.prise.common.model.Node;
import java.util.ArrayList;
import java.util.List;
/**
* descript:
* creat by on 2018/9/27
*/
public class TreeUtil {
// 入口方法
public static List<Node> getTree(List<Node> nodeList) {
List<Node> list = new ArrayList<Node>();
// 遍历节点列表
for (Node node : nodeList) {
if (node.getParentId().equals("-1")) {
// parentID为-1(根节点)作为入口
node.setChildren( getChildrenNode(node.getId(), nodeList));
list.add(node);
}
}
return list;
}
// 获取子节点的递归方法
private static List<Node> getChildrenNode(String id, List<Node> nodeList) {
List<Node> list = new ArrayList<Node>();
for (Node node : nodeList) {
if (node.getParentId().equals(id)) {
// 递归获取子节点
node.setChildren(getChildrenNode(node.getId(), nodeList));
list.add(node);
}
}
return list;
}
}
Node
package com.shop.prise.common.model;
import java.util.ArrayList;
import java.util.List;
/**
* descript:
* creat by on 2018/9/27
*/
public class Node {
private String id;
private String name;
private String parentId;
//private int order;
private List<Node> children = new ArrayList<Node>();
public Node() {
}
public Node(String id, String name, String parentId) {
this.id = id;
this.name = name;
this.parentId = parentId;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getParentId() {
return parentId;
}
public void setParentId(String parentId) {
this.parentId = parentId;
}
/*public int getOrder() {
return order;
}
public void setOrder(int order) {
this.order = order;
}*/
public List<Node> getChildren() {
return children;
}
public void setChildren(List<Node> children) {
this.children = children;
}
}
Children
package com.shop.prise.common.model;
import java.util.ArrayList;
import java.util.List;
/**
* descript:
* creat by zhiyu on 2018/9/27
*/
public class Children {
private List<Node> list = new ArrayList<Node>();
// ...get set 方法,构造方法
public List<Node> getList() {
return list;
}
public void setList(List<Node> list) {
this.list = list;
}
public int getSize() {
return list.size();
}
public void addChild(Node node) {
list.add(node);
}
}
使用
//查询所有分类
List<GoodsCategory> queryList = goodsCategoryMapper.getAllGoodsCategory();
List<Node> nodeList = new ArrayList<>();
for (GoodsCategory goodsCategory :queryList){
nodeList.add(new Node(goodsCategory.getId(), goodsCategory.getName(), goodsCategory.getParentId()));
}
List<Node> nodeTree = TreeUtil.getTree(nodeList);
以上就是树形结构的生成了
下面说说怎么解析树了
/**
* TODO: 将树的所有id取出来
* 我们利用sql的in查询即可查出该分类下的商品了
* @return
* @author
* @date 2018/10/11 19:12
*/
private List<String> getCategoryIds(String id) {
//查询所有分类
List<GoodsCategory> queryList = goodsCategoryMapper.getAllGoodsCategory();
List<Node> nodeList = new ArrayList<>();
for (GoodsCategory goodsCategory : queryList) {
nodeList.add(new Node(goodsCategory.getId(), goodsCategory.getName(), goodsCategory.getParentId()));
}
//获取该分类下所有子分类并拼接成树
nodeList = TreeUtil.getTree(nodeList, id);
System.out.println(JsonUtils.objectToJson(nodeList));
recursion(nodeList);
return cList;
}
/**
* TODO: 递归查找子分类
*
* @return
* @author
* @date 2018/10/11 19:33
*/
private Node recursion(List<Node> root) {
if (root == null) {
return null;
} else {
Node nodeResult = null;
for (Node node : root) {
cList.add(node.getId());
//如果有子分类继续查找
if (hasChild(node)) {
nodeResult = recursion(node.getChildren());
}
}
return nodeResult;
}
}
/**
* TODO: 判断树是否有子节点
*
* @return
* @author
* @date 2018/10/11 19:13
*/
private boolean hasChild(Node root) {
boolean has = false;
if (root != null && root.getChildren() != null && !root.getChildren().isEmpty()) {
has = true;
}
return has;
}