5 Star 50 Fork 0

Gitee Community / 码力传递:晒代码赢奖品

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
通用树形结构数据转换帮助类.java 2.72 KB
一键复制 编辑 原始数据 按行查看 历史
wqmain 提交于 2020-06-02 16:38 . 通用树形结构数据转换帮助类
/**
* 通用树形结构数据转换帮助类
*/
public class TreeUtil {
/**
* 将集合列表数据转换成树形结构列表数据
* TreeEntry 包含id、pid、children等树形结构数据通用属性
* KV 为继承了LinkedHashMap并且扩展了链式调用添加键-值的自定义类
* @param list 原始集合列表数据
*/
public static <T extends TreeEntry> List<KV> tree(List<T> list) {
if(Collections.isEmpty(list)) {
return null;
}
Collections.sort(list);
List<KV> result = new LinkedList<>();
Map<String, KV> nodes = new HashMap<>();
for (T obj : list) {
nodes.put(String.valueOf(obj.getId()), KV.create().set(obj));
}
for (T obj : list) {
KV target = nodes.get(obj.getId());
KV parent = nodes.get(obj.getPid());
if (parent == null) {
result.add(target);
} else {
List children = (List)parent.get("children");
if(children == null) {
children = (List)parent.set("children", new LinkedList<>()).get("children");
}
children.add(target);
}
}
return result;
}
/**
* 将集合列表数据构转换成树形结构列表数据
* KV 为继承了LinkedHashMap并且扩展了链式调用添加键-值的自定义类
* @param keyName 树形结构数据标识属性名称,如:id
* @param pkeyName 树形结构上级标识属性名称,如:pid
* @param childName 下级节点集合属性名称,如:children
* @param list 原始集合列表数据,集合数据项至少需包含keyName和pkeyName属性
*/
public static List<KV> tree(String keyName, String pkeyName, String childName, List list) {
if(Collections.isEmpty(list)) {
return null;
}
Collections.sort(list);
List<KV> result = new LinkedList<>();
Map<String, KV> nodes = new HashMap<>();
KV kv = null;
for (Object data : list) {
kv = KV.create().set(data).set(childName, new LinkedList<>());
nodes.put(String.valueOf(ReflectKit.getValue(data, keyName)), kv);
}
for (Object data : list) {
KV target = nodes.get(String.valueOf(ReflectKit.getValue(data, keyName)));
KV parent = nodes.get(String.valueOf(ReflectKit.getValue(data, pkeyName)));
if (parent == null) {
result.add(target);
} else {
((List)parent.get(childName)).add(target);
}
}
return result;
}
}
1
https://gitee.com/gitee-community/gitee-7th-event-3.git
git@gitee.com:gitee-community/gitee-7th-event-3.git
gitee-community
gitee-7th-event-3
码力传递:晒代码赢奖品
master

搜索帮助