/**
* @param tree 开始节点 遍历完之后,org变成新的树
* @param treeList 该节点的子节点集合
* 因为集合是引用数据类型(传递引用地址) 这里void即可,原来的集合是本身就会改变的
* @author Marder
* 遍历树形List,添加一些补充信息
*/
private static void getTree(Tree<String> tree, List<Tree<String>> treeList) {
//开始节点 id作为下一个节点的 父id
String parentId = tree.getId();
//子集合
List<Tree<String>> childs = new ArrayList<>();
//创建集合的迭代器。循环时list的remove会抛异常,故必须用迭代器遍历,调它的remove
Iterator<Tree<String>> iterator = treeList.iterator();
//开始遍历集合
while (iterator.hasNext()) {
//集合中的一个元素
Tree<String> entity = iterator.next();
//该节点的子节点
List<Tree<String>> nextChilds = entity.getChildren();
// 初始节点的parentId是null/0
//if(entity.getParentId()==null || entity.getParentId() == parentId){
if ("0".equals(entity.getParentId()) || entity.getParentId() == parentId) {
//子节点
Tree<String> newEntity = new Tree<String>();
newEntity.setId(entity.getId());
newEntity.setName(entity.getName());
newEntity.setParentId(entity.getParentId());
//该(子)节点的子节点 在entity这个实体类中叫list属性-_-||
newEntity.setChildren(nextChilds);
System.out.println(newEntity.getName() + newEntity.getId());
childs.add(newEntity);
}
}
//设置子节点集合
tree.setChildren(childs);
//给子节点设置它的子节点
//当子节点不为空时
if (!CollectionUtil.isEmpty(childs)) {
//为子节点添加子节点
Iterator<Tree<String>> iterator2 = childs.iterator();
while (iterator2.hasNext()) {
Tree<String> next = iterator2.next();
//且子节点的子节点集合不为空时,递归
if (!CollectionUtil.isEmpty(next.getChildren())) {
getTree(next, next.getChildren());
}
}
}
}
遍历树得到一个新树
最新推荐文章于 2024-11-13 10:35:54 发布
该代码段展示了一个在Java中遍历列表并构建树形结构的过程。通过迭代和递归,将具有父ID关联的数据转换成树结构,并添加到相应的父节点下。

955

被折叠的 条评论
为什么被折叠?



