java 递归 设置层级 分级数

  //多级角色递归查询方法
    public List<ProductCategory> iterateRoles(List<ProductCategory> menuVoList,String pid,Long level){
        List<ProductCategory> result = new ArrayList<>();
        ++level;//level计算当前处于第几级
        for (ProductCategory menuVo : menuVoList) {
            String menuid = menuVo.getId().toString();//获取菜单的id
            String parentid = menuVo.getParentId().toString();//获取菜单的父id
            if(parentid != "0"){
                if(parentid.equals(pid)){
                    menuVo.setLevel(level);
                    List<ProductCategory> iterateMenu = iterateRoles(menuVoList,menuid,level);
                    menuVo.setProductCategories(iterateMenu);
                    result.add(menuVo);
                }
            }
        }
        return result;
    }

思路:先从第三级思考,为什么会是3?加1!哪里的加1,上级的加1,上级是2,2+1=3

2是怎么来的,也是上级加1来的,总结到最上一级就是0.

突破口:menuVo.setLevel(level);

              iterateRoles(menuVoList,menuid,level);

同级的不能改变只能都是同一个值,那么level就注定只能在for外面了,level也只能来的时候在加一,在其他地方会有其他错误

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设我们有一个树形结构的节点类,具有以下属性: ```java class TreeNode { int id; int parentId; String name; List<TreeNode> children; } ``` 其中,id 是节点的唯一标识符,parentId 是父节点的 id,name 是节点的名称,children 是子节点列表。 现在我们需要对这个树进行归处理,给每个节点设置一个 level 属性表示节点的层级,并按照层级排序。 可以通过以下归方法实现: ```java public static void setLevelAndSort(List<TreeNode> nodes, int level) { if (nodes == null || nodes.isEmpty()) { return; } for (TreeNode node : nodes) { node.level = level; setLevelAndSort(node.children, level + 1); } Collections.sort(nodes, new Comparator<TreeNode>() { @Override public int compare(TreeNode o1, TreeNode o2) { return o1.id - o2.id; } }); } ``` 这个方法接受两个参数:节点列表和当前层级。首先遍历节点列表,给每个节点设置 level 属性,然后归处理子节点列表,并将当前层级加一。最后,对当前节点列表按照 id 排序。 示例代码如下: ```java public static void main(String[] args) { List<TreeNode> nodes = new ArrayList<>(); nodes.add(new TreeNode(1, 0, "A", new ArrayList<>())); nodes.add(new TreeNode(2, 1, "B", new ArrayList<>())); nodes.add(new TreeNode(3, 1, "C", new ArrayList<>())); nodes.add(new TreeNode(4, 2, "D", new ArrayList<>())); nodes.add(new TreeNode(5, 2, "E", new ArrayList<>())); nodes.add(new TreeNode(6, 3, "F", new ArrayList<>())); nodes.add(new TreeNode(7, 3, "G", new ArrayList<>())); setLevelAndSort(nodes, 0); for (TreeNode node : nodes) { System.out.println(node.id + " " + node.parentId + " " + node.name + " " + node.level); } } ``` 输出结果如下: ``` 1 0 A 0 2 1 B 1 4 2 D 2 5 2 E 2 3 1 C 1 6 3 F 2 7 3 G 2 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值