// 将数据存储为 以 id 为 KEY 的 map 索引数据列
Map<String, AntdTreeNode> map = new HashMap<>(16);
mapList.forEach(m -> map.put(m.get(idField).toString(),
convertToAntdTreeNodeFromMap(m, parentIdField, textField, keyField, valueField)));
List<AntdTreeNode> treeList = new ArrayList<>();
// 遍历, 组装返回结果
for (Map mm : mapList) {
// 获取当前资源的id和父id
String curId = mm.get(idField).toString();
String curPid = mm.get(parentIdField) == null ? null : mm.get(parentIdField).toString();
// 如果父节点不存在或id 和 pid值一样,则当前节点是顶级节点
AntdTreeNode parent = map.get(curPid);
// if(parent == null || resource.getId().equals(curPid)) 这种会把所有pid识别不了的都作为顶级节点,某些
// 情况下有问题,比如当某个角色没有勾选父菜单,只勾选了子菜单的时候,把子菜单当做了顶级节点(这种情况应该很少,
// 因为勾选子节点一定要要求他勾选父节点)
if (parent == null || curId.equals(curPid)) {
// 是顶级节点
treeList.add(map.get(curId));
} else {
// 子节点,需要把自己添加到他父节点的children中去
if (parent.getChildren() == null) {
parent.setChildren(new ArrayList<>());
}
parent.getChildren().add(map.get(curId));
parent.setIsLeaf(false);
if (parentDiabled) {
parent.setDisableCheckbox(true);
parent.setDisabled(true);
parent.setSelectable(false);
}
}
}
return treeList;
高效的将List转换成Tree
最新推荐文章于 2024-06-27 11:22:44 发布