3 最后,改造TreeUtil.build 方法,基于2.0版本,只需将TreeNode替换成TreeNodeMap即可。
/*** 树构建
*/
public static <T> List<TreeNodeMap> build(List<T> list,Object parentId,Convert<T,TreeNodeMap> convert){
List<TreeNodeMap> treeNodes = CollectionUtil.newArrayList();
for(T obj : list){
TreeNodeMap treeNode = new TreeNodeMap();
convert.convert(obj,treeNode);
treeNodes.add(treeNode);
}
List<TreeNodeMap> finalTreeNodes = CollectionUtil.newArrayList();
for(TreeNodeMap treeNode : treeNodes){
if(parentId.equals(treeNode.getParentId())){
finalTreeNodes.add(treeNode);
innerBuild(treeNodes,treeNode);
}
}
return finalTreeNodes;
}
测试代码 public static void main(String[] args) {
// ... 省略菜单模拟数据的创建过程
TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
// 自定义属性名
treeNodeConfig.setCodeKey("number");
List<TreeNodeMap> treeNodes = TreeUtil_4_0.build(menuEntityList, "0",treeNodeConfig,new TreeUtil_4_0.Convert<MenuEntity, TreeNodeMap>() {
@Override
public void convert(MenuEntity object, TreeNodeMap treeNode) {
treeNode.setId(object.getId());
treeNode.setParentId(object.getPid());
treeNode.setCode(object.getCode());
treeNode.setName(object.getName());
// 属性扩展
treeNode.extra("extra1","123");
}
});
Console.log(JSONUtil.formatJsonStr(JSONUtil.toJsonStr(treeNodes)));
}
经过上面的改造,我们实现了树节点属性的自定义,顺便还实现了属性可扩展,一举两得。
3、总结目前这个程度可能仍有些场景无法满足,但是对于大部分的问题场景基于3.0或4.0版本稍加改造应该都可以解决。剩下的就结合场景再酌情优化调整。
4、源代码&视频springboot-tree
5、更多精彩觉得还行,动动手指留个赞。
以上就是今天的内容,我们下期见。
更多优质内容,首发公众号【风象南】,欢迎关注。