顺序排列的集合排序为树形集合

要求   表结构   

ID , 父ID,层级,当前层排序号 (例子如下)   层级和当前层排序号为提供原始集合排序使用


public class ResourceVo {

   /**
    * 资源编号
    */
   private String id;

   /**
    * 资源名称
    */
   private String name;

   /**
    * 父资源编号
    */
   private String parentId;

   /**
    * 创建时间
    */
   private Date createTime;

   /**
    * 修改时间
    */
   private Date updateTime;
   /**
    * 子资源集合 来自resourceVo,为了兼容前端页面
    */
   private List<ResourceVo> list;

   /**
    * 排序
    */
   private int sort;

   /**
    * 层级
    */
   private int grade;
   get和set方法略。
  }
/**
 * 生成树形数据
 * @param resources 原始按照层级顺序排序后的集合
 * @param resource_id  第一个ID编号
 * @return 排序后的树图
 */
public List<ResourceVo> getTree(List<ResourceVo> resources, String resource_id){
    //创建返回的树图集合
    List<ResourceVo> rootResources = new ArrayList<ResourceVo>();
    //遍历原始集合
    for (ResourceVo thisResources : resources) {
        //判断第一个元素 (ID等于指定的ID)
        if (thisResources.getId().equals(resource_id)) {
            //放入结果集合
            rootResources.add(thisResources);
        } else {
            //查询出遍历对象的父对象
            ResourceVo parentMobCateBarVo = findResources(rootResources, thisResources.getParentId());
            //判断父类型不为空(为空表示原始排序有问题)
            if (parentMobCateBarVo != null) {
                //判断父类型下面是否有集合,没有创建集合
                if (parentMobCateBarVo.getList() == null) {
                    parentMobCateBarVo.setList(new ArrayList<ResourceVo>());
                }
                //把遍历对象放到父对象的集合中
                parentMobCateBarVo.getList().add(thisResources);
            } else {
                log.error("数据问题:" + thisResources);
            }
        }
    }
    //返回排序后的树状集合
    return rootResources;
}

/**
 * 获取父类型
 * @param rootResources 树图集合
 * @param tagetId 遍历对象的父类型ID
 * @return
 */
private ResourceVo findResources(List<ResourceVo> rootResources, String tagetId) {
    //遍历树图集合
    for (ResourceVo mobCateBarVo : rootResources) {
        //如果遍历对象的ID等于传入的ID返回当前遍历对象
        if (mobCateBarVo.getId().equals( tagetId)) {
            return mobCateBarVo;
        }
        //如果遍历对象中保存的对象集合不为空迭代调用
        if (mobCateBarVo.getList() != null && mobCateBarVo.getList().isEmpty() == false) {
            ResourceVo tg = findResources(mobCateBarVo.getList(), tagetId);
            if (tg != null) {
                return tg;
            }
        }
    }
    //集合遍历完毕没有找到返回空
    return null;
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值