设计程序的时候,多维度条件情况处理
对于多维条件的限制时,可以先只考虑一个主要的条件,然后看怎么在这这条件中植入其他维度的条件
比如下面的代码是以根为一个重复单元(根及其紧下一层)(迭代维度)
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;
}