Java 多级菜单树工具
关于Java中多级菜单树的处理
- 今天被一个菜单列表的展现折磨得不轻,自己写代码发现实在是费时费力,而且代码量太大,逻辑亟待优化,后续找到了这个代码十分简洁的工具类,说实话我只能看得懂,写不出来这种东西。在此分享给大家,避免重复造轮子的工作~
多级树Bean
这是一个基础bean:
/**
* 功能描述:
* 【分组信息bean】
* 注意,下面的bean每个属性都为必要属性,不可缺一
* 继承此bean再添加多个属性,不会影响树结构
* 类上的三个注解为lombok插件
*
* @author chihiro
* @version V1.0
* @date 2019/03/06 17:35
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class BaseTree implements Serializable {
private static final long serialVersionUID = 8L;
/**
* 树主键
*/
private String treeId;
/**
* 父节点id
*/
private String parentId;
/**
* 子节点集合
*/
private List<? extends BaseTree> childrens;
}
树工具类
核心工具类:
/**
* 功能描述:
* 【多级树util】
* 核心是使用递归
*
* @author chihiro
* @version V1.0
* @date 2019/03/06 18:45
*/
@AllArgsConstructor
public class TreeToolUtil<T extends BaseTree> {
/**
* 根节点
*/
private List<T> rootList;
/**
* 叶子节点
*/
private List<T> bodyList;
public List<T> getTree() {
if (CollUtil.isNotEmpty(bodyList)) {
//声明一个map,用来过滤已操作过的数据
Map<String, String> map = MapUtil.newHashMap(bodyList.size());
rootList.forEach(beanTree -> getChild(beanTree, map));
return rootList;
}
return null;
}
private void getChild(T beanTree, Map<String, String> map) {
List<BaseTree> childList = CollUtil.newArrayList();
bodyList.stream()
.filter(group -> !map.containsKey(group.getTreeId()))
.filter(group -> group.getParentId().equals(beanTree.getTreeId()))
.forEach(group -> {
map.put(group.getTreeId(), group.getParentId());
getChild(group, map);
childList.add(group);
});
beanTree.setChildrens(childList);
}
}
后记
- 若发现bug,请联系博主