Java通用三级菜单工具类
通常在写三级菜单时会使用递归方式去写,但是时间长了会发现很多重复的代码一直在写,改,也就改几个名字。
实现方式
抽象属性结构
常用的三个字段,子级id、父级id、其次是数组children。
将返回对象或者是三级菜单对象实现这个类。
import java.util.List;
public interface AbstractTreeNode {
// 子级id
Long getId();
// 父级id
Long getParentId();
// 子级数组
void setChildren(List<? extends AbstractTreeNode> children);
}
构建树型结构
import java.util.ArrayList;
import java.util.List;
public class TreeBuilder<T extends AbstractTreeNode> {
/**
* 构建属性结构
*
* @param nodeList 需要构建的数组
* @return 树型结构
*/
public List<T> buildTree(List<T> nodeList) {
List<T> tree = new ArrayList<>();
for (T node : nodeList) {
if (node.getParentId() == 0) {
node.setChildren(getChildren(node.getId(), nodeList));
tree.add(node);
}
}
return tree;
}
/**
* 递归设置子级菜单
*
* @param nodeId 节点id
* @param nodeList 节点列表
* @return 子级菜单
*/
private List<T> getChildren(Long nodeId, List<T> nodeList) {
List<T> children = new ArrayList<>();
for (T node : nodeList) {
if (node.getParentId().equals(nodeId)) {
node.setChildren(getChildren(node.getId(), nodeList));
children.add(node);
}
}
return children;
}
}