/** * @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()); } } } }
遍历树得到一个新树
最新推荐文章于 2023-12-10 18:36:31 发布