Java 递归遍历多个顶级节点tree

Java 递归遍历多个顶级节点tree

引用外部依赖

			<dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <guava.version>18.0</guava.version>
   		</dependency>
注释: 版本随意.只需要有 ArrayListMultimap 一个key 对应多个values 即可  
也可以自己写一个 Map<Integer,List<String>> levelmap=new HashMap<Integer,List<String>>();

代码:

 /**
     * 递归获取树层结构
     */
    public List<latestObject> recursionTransition(List<object> primaryObject, Integer topNode) {
    	// 自定义的 bean 复制对象 ( 可以自己写一个  就是把原来的对象 复制到新的对象里面,
    	//  其实就是多个一个 list<latestObject> 的参数 可以进行递归节点操作 )
        List<latestObject> latestObjectList = BeanCopierUtil.copyBeanList(primaryObject, latestObject.class);
        // 创建一个 一个key 多个value 的这个对象
        ArrayListMultimap<Integer, latestObject> multiMap = ArrayListMultimap.create();
        List<latestObject> latestObjectListA = new ArrayList<>();
        latestObjectList.forEach(latestObject-> {
            multiMap.put(latestObject.getParentId(), latestObject);
            if (latestObject.getParentId().equals(parentId)) {
                latestObjectListA .add(latestObject);
            }
        });

        regionalLevel(multiMap, menuListVOList1, parentId);

        return latestObjectListA;
    }

    /**
     * 递归遍历对象
     */
    public void regionalLevel(ArrayListMultimap<Integer, latestObject> multiMap, List<latestObject> latestObjectListA ,,Integer id) {
        latestObjectListA .forEach(latestObject-> {
            List<latestObject> latestObjectList = multiMap.get(id);
            if (!CollectionUtils.isEmpty(latestObjectList)) {
                if (latestObject.getId().equals(id)) {
                    latestObject.setMenuListVOList(latestObjectList );
                } 
                   regionalLevel(multiMap, latestObjectListA, latestObject.getId());
            }
        });
    }

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值