多维度条件情况处理

设计程序的时候,多维度条件情况处理

对于多维条件的限制时,可以先只考虑一个主要的条件,然后看怎么在这这条件中植入其他维度的条件

比如下面的代码是以根为一个重复单元(根及其紧下一层)(迭代维度)

   1,以最大根(100000)为开始迭代,每迭代一次处理一个根,进入下一个根(动态变化的根)

   2,处理每个根的时候,先处理直接在这个根下的页面(不可再作为根的),然后处理这个根下的文件夹(可再作为根的),此文件夹又当作根即开始迭代,一个根迭代一次

   3,有1,2就迭代可以,至于里面if else条件的完备可以处理所有级别的根,只要把所有级别的根遍历是的情况用 if else 全部罗列即可

但是,比以前做的多了一个比对,所以多了最外面的if else,以前是结合sql有层级的递归下去,这个是把无序的 用一个有序标准组织起来,在遍历标准的时候和需要排序的比对,排序,

标准遍历完,无序的就排完序)(排序维度)

  比如树状菜单:

  每层级有直接挂页面,有挂文件夹两种大情况,在文件夹又是这两种。

  private Tree getTree(MenuFolder paramMenuFolder, Set paramSet, int level)(

  {

    Tree localTree1 = null;

    if (paramSet.contains(paramMenuFolder))即页面直接挂的是最外层文件夹(根)的情况

    {

      localTree1 = new Tree(paramMenuFolder.getId(), 0, new MenuFolderDTO(paramMenuFolder), paramMenuFolder.getDisplayOrder());//本节点成一树(根文件夹建树)

      Object localObject1 = paramSet.iterator();

      while (((Iterator)localObject1).hasNext())//遍历已经和页面有关联的文件夹

      {

        Object localObject2 = (MenuFolder)((Iterator)localObject1).next();

        if (((MenuFolder)localObject2).equals(paramMenuFolder))//当是那个直接挂页面的一级文件夹

        {

          Object localObject3 = ((MenuFolder)localObject2).getMenuItems();//获取这根个文件夹下所有页面

          Object localObject4 = ((Set)localObject3).iterator();

          while (((Iterator)localObject4).hasNext())

          {

            Object localObject5 = (MenuItem)((Iterator)localObject4).next();

            MenuItemDTO localMenuItemDTO = new MenuItemDTO((MenuItem)localObject5);//遍历并组装页面

            if (localMenuItemDTO.getLevel1() >= level)

            {

              Tree localTree2 = new Tree(localMenuItemDTO.getId(), 1, localMenuItemDTO, localMenuItemDTO.getDisplayOrder());//页面建树

              localTree1.getSonList().add(localTree2);//这个页面放在本树的子节点

            }

          }

        }

      }//处理直接关在根文件夹的所有页面,建立页面树

    

      localObject1 = paramMenuFolder.getChildFolders();//获取此根级文件的一级文件夹,处理该一级文件夹下的所有二级文件夹

      if ((localObject1 != null) && (((Set)localObject1).size() > 0))

      {

        Object localObject2 = ((Set)localObject1).iterator();

        while (((Iterator)localObject2).hasNext())

        {

          Object localObject3 = (MenuFolder)((Iterator)localObject2).next();//

          Tree tree = getTree((MenuFolder)localObject3, paramSet, level);//遍历子一级文件夹建树///////开始迭代,到了文件夹才迭代

          if (tree != null) {

            localTree1.getSonList().add(tree);

          }

        }

      }

    }

    else//页面不直接挂在根文件夹上,隔了一层文件夹

    {

      Object localObject1 = new ArrayList();

      Object localObject2 = paramMenuFolder.getChildFolders();//获取该根文件夹的所有一级文件夹

      if ((localObject2 != null) && (((Set)localObject2).size() > 0))

      {

        Object localObject3 = ((Set)localObject2).iterator();

        while (((Iterator)localObject3).hasNext())

        {

          Object localObject4 = (MenuFolder)((Iterator)localObject3).next();//迭代这些一级文件夹

          Object localObject5 = getTree((MenuFolder)localObject4, paramSet, level);此时一级文件夹作为“根”,迭代()

          if (localObject5 != null) {

            ((List)localObject1).add(localObject5);

          }

        }

      }

      if (((List)localObject1).size() > 0)//有

      {

        localTree1 = new Tree(paramMenuFolder.getId(), 0, new MenuFolderDTO(paramMenuFolder), paramMenuFolder.getDisplayOrder());

        localTree1.setSonList((List)localObject1);属于不同的迭代次,和getSonList效果一致

      }

    }

    if (localTree1 != null) {

      Collections.sort(localTree1.getSonList());

    }

    return localTree1;

  }

猜你喜欢

转载自yuhuiblog6338999322098842.iteye.com/blog/2313889