public static void main(String[] args) {
List<A> list = new ArrayList<>();
A a = new A();
a.setName("领导");
a.setPcode("0");
a.setCode("S21111309");
A a2 = new A();
a2.setName("主管");
a2.setPcode("S21111309");
a2.setCode("S21111310");
A a1 = new A();
a1.setName("库管1");
a1.setPcode("S21111310");
a1.setCode("S21111311");
A a3 = new A();
a3.setName("库管2");
a3.setPcode("S21111310");
a3.setCode("S21111312");
A a4 = new A();
a4.setName("库3");
a4.setPcode("S21111310");
a4.setCode("S21111313");
A a5 = new A();
a5.setName("一库");
a5.setPcode("S21111309");
a5.setCode("S21111314");
A a6 = new A();
a6.setName("二库");
a6.setPcode("S21111309");
a6.setCode("S21111315");
A a7 = new A();
a7.setName("三库");
a7.setPcode("S21111309");
a7.setCode("S21111316");
list.add(a);
list.add(a1);
list.add(a2);
list.add(a3);
list.add(a4);
list.add(a5);
list.add(a6);
list.add(a7);
List<A> allClassification = findAllClassification(list);
}
public static List<A> findAllClassification(List<A> dataList) {
// 获取顶层list
List<A> top = dataList.stream().filter(classificationDO1 -> classificationDO1.getPcode().equals("0")).collect(Collectors.toList());
//根据pid分组
Map<String, List<A>> map = dataList.stream().collect(Collectors.groupingBy(A::getPcode));
//查询菜单层级
List<A> classificationVos = treeCategoryData(top, map);
return classificationVos;
}
public static List<A> treeCategoryData(List<A> top, Map<String, List<A>> allMap) {
//遍历
List<A> result = new ArrayList<>();
// 遍历
top.forEach(category -> {
List<A> children = allMap.get(category.getCode());
if (children != null && !children.isEmpty()) {
// 如果有子菜单,则在结果中不保留当前菜单,只递归处理并保留它的子菜单
result.addAll(treeCategoryData(children, allMap));
} else {
// 如果没有子菜单,直接保留当前菜单
category.setChildren(null);
result.add(category);
}
});
return result;
}
11-27
3854