目录
上一篇文章提到用left join处理父子级数据(自定义省市区联动展示(全栈代码)-优快云博客),突然又想到在业务层直接处理的工具类,便记录一下,共自己以后查阅。
1.hutool里面的TreeUtil(树结构工具-TreeUtil | Hutool):
上一篇文章提到用left join处理父子级数据(自定义省市区联动展示(全栈代码)-优快云博客),突然又想到在业务层直接处理的工具类,便记录一下,共自己以后查阅。
1.hutool里面的TreeUtil(树结构工具-TreeUtil | Hutool):
2.用它处理省市区数据
1.查询具有父子级数据
2.利用TreeUtil处理数据
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.lang.tree.TreeNodeConfig;
import cn.hutool.core.lang.tree.TreeUtil;
import cn.hutool.core.lang.tree.parser.NodeParser;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* 扩展 hutool TreeUtil
*
* @author 菜鸟
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class TreeBuildUtils extends TreeUtil {
/**
* 根据前端定制差异化字段
*/
public static final TreeNodeConfig DEFAULT_CONFIG = TreeNodeConfig.DEFAULT_CONFIG.setNameKey("label");
public static <T, K> List<Tree<K>> build(List<T> list, NodeParser<T, K> nodeParser) {
if (CollUtil.isEmpty(list)) {
return null;
}
K k = ReflectUtils.invokeGetter(list.get(0), "parentId");
return TreeUtil.build(list, k, DEFAULT_CONFIG, nodeParser);
}
}
List<Tree<Object>> build = TreeBuildUtils.build(cesDiqus, (dept, tree) ->
tree.setId(dept.getId())
.setParentId(dept.getParentId())
.setName(dept.getName())
.setWeight(0));
3.看看效果
4.注意点:这个父子id的数据类型得一致,否则会出错。附上源码
5.这里面的参数都挺简单的,就不赘述了。哈哈