工作中碰到了将所有节点排成有序树结构的情况,在网上学习了下,找了我认为最简单的,并加上了排序,在此记录一下。
代码亲测可以,只要稍作修改就可以使用:
第一步
首先需要在你的实体类中增加一个字段,来存储子节点。
第二步
加入下面代码,并更换实体类和排序规则
public List<MenuVO> getChildNode(String rootMenu, List<MenuVO> allMenuList) {
List<MenuVO> childMenu = new ArrayList<>();
for (MenuVO menu : allMenuList) {
if (menu.getParentCode().compareTo(rootMenu) == 0) {
// 递归查询此节点下的所有子节点
List<MenuVO> childNode = getChildNode(menu.getMenuCode(), allMenuList);
menu.setChildNode(childNode);
childMenu.add(menu);
}
}
// 子节点进行排序
List<MenuVO> childSortMenu = Optional.ofNullable(childMenu)
.map(List::stream)
.orElseGet(Stream::empty)
.sorted(Comparator.comparing(MenuVO::getSeq))
.collect(Collectors.toList());
return childSortMenu;
}
红框内,你想要按哪个字段进行排序就换成那个字段的get方法。
如不需要排序可以把这一段删掉
第三步
然后在你的方法中调用即可
List<MenuVO> result = getChildNode("0", allMenuList);
第一个参数为你 根节点的父节点id ,第二个参数为 所有的节点