树形此博文包含图片结构数据后台处理:一次循环生成树


 树形结构数据后台处理:一次循环生成树

 //一、优化算法下的树结构遍历
  @SuppressWarnings("unchecked")
 public String gainTreeFolder(){
  //1 设置虚拟根节点
  root = new Folders();
  root.setFolderId(MyConstants.ID);
  root.setFolderName("顶部");
  // 2查询该节点下的树形结构的数据.
  List<Folders> fileList = filesService.queryList("Folders", "queryAll",root);
   Map map=new TreeMap<String,Folders>();
  Folders tempTree;
  //3 将list中元素放入map.其中主键为key.
  Folders subRoot=null;
  for(int i=0;fileList!=null&&i<fileList.size();i++){
   tempTree=fileList.get(i);
   map.put(tempTree.getId(), tempTree);
   if(MyConstants.ID.equals(tempTree.getParentId())){
    subRoot=tempTree;
    root.getChildren().add(subRoot);
   }
  }
  //4 循环。将循环中的节点,添加到上一级节点中。
  for(int i=0;fileList!=null&&i<fileList.size();i++){
   tempTree=fileList.get(i);
   Folders t=(Folders)map.get(tempTree.getParentId());
   if(t!=null){
   t.getChildren().add(tempTree);
    map.put(tempTree.getParentId(), t);
   }
  }

    //5返回root.
  return SUCCESS;
 }

 

二、原有算法

// 加载文件夹结构图
 @SuppressWarnings("unchecked")
 public String loadFoldersMap() {

  logger.info("开始文件夹结构图");
  // 1 设置根节点
  root = new Folders();
  root.setFolderId(MyConstants.ID);
  root.setParentId(MyConstants.PARENTID);
  root.setFolderName("顶部");
  root.setOwnerType((short) 9);
  // 2查询该节点下的树形结构的数据.
  List<Folders> fileList = filesService.queryList("Folders", "queryAll",
    root);
  // 3 循环将下级节点数据添加进来
  ConcurrentLinkedQueue<Folders> newList = new ConcurrentLinkedQueue<Folders>();
  newList.addAll(fileList);
  getList(root, newList);

  return SUCCESS;

 void getList(Folders files, ConcurrentLinkedQueue<Folders> fileLists) {
  List<Folders> sublist = new ArrayList<Folders>();
  if (!MyUtils.isEmpty(fileLists)) {
   for (Iterator<Folders> iterator = fileLists.iterator(); iterator
     .hasNext();) {
    Folders temp = (Folders) iterator.next();
    if (MyUtils.equals(temp.getParentId(), files.getFolderId())) {
     sublist.add(temp);
     
iterator.remove();
     getList(temp, fileLists);
    }
   }
  }public 
  files.setChildren(sublist);
 }


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值