实现多级分类:
1、双重 for 循环实现 N 及分类
/***
* 执行遍历
*
* @param menus
* 所有权限列表集合
* @param list
* 指定角色查询到的 权限Id
* @return
*/
@SuppressWarnings("unused")
private List<MenuFunction> menuFunction(List<MenuFunction> menus, List<Integer> list) {
// 中转集合
List<MenuFunction> functions = null;
try {
functions = new ArrayList<MenuFunction>();
// 循环遍历菜单层级关系
// 循环遍历
int a = 0;
int b = 0;
int c = 0;
for (MenuFunction item : menus) {
b = 0;
++c;
// 获取pid
long pid = item.getPid();
System.out.println("外层---循环》》》 " + (++a) + " 当前PID:" + pid);
if (list.contains(item.getId().intValue())) {
item.setChecked(true);//
}
if (pid == 0) {
// 遍历一级分类
functions.add(item);
} else {
System.out.println("******************************************");
for (MenuFunction innerCate : menus) {
++c;
/***
* 外层循环 pid 没有的等于0 的话 获取当前对象的 id 作为一级
*/
Long id = innerCate.getId();
System.out.println("内层---循环》》》 " + (++b) + " 当前ID:" + id);
if (id == pid) {
innerCate.getChildren().add(item);
break;
}
}
}
}
System.out.println("循环总记录数为:》》》 " + c);
} catch (Exception e) {
LOGGER.error("循环遍历层级关系失败!!!" + e);
}
return functions;
}
/***
* 去掉空的权限
*
* @param list
* @return
*/
private List<MenuFunction> notNull(List<MenuFunction> list) {
List<MenuFunction> menusList = null;
try {
// 去掉空的权限
menusList = new ArrayList<MenuFunction>();
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getChildren().size() != 0) {
menusList.add(list.get(i));
notNull(list.get(i).getChildren());
}
}
} catch (Exception e) {
LOGGER.error("去除空的权限时意外出错!!!" + e);
}
return menusList;
}
2、递归实现