代码拉取完成,页面将自动刷新
/**
* 通用树形结构数据转换帮助类
*/
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;
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。