classes:为我的实体类,请替换为你的实体类,并确保其中有parentId字段和childrenList,确保父节点的parentId为0也就是最顶级
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
public List<Classes> getChildrenList(Classes classes) { List<Classes> treeList = Optional.ofNullable(groupMealOrdersMapper.selectClassesList(classes)) .orElse(Collections.emptyList());
if (treeList.isEmpty()) { return Collections.emptyList(); }
Map<Long, List<Classes>> childrenMap = buildChildrenMap(treeList);
List<Classes> topLevelNodes = treeList.stream() .filter(item -> item.getParentId() == 0) .peek(item -> item.setChildrenList(childrenMap.getOrDefault(item.getClassId(), Collections.emptyList()))) .collect(Collectors.toList());
fillChildren(topLevelNodes, childrenMap);
return topLevelNodes; }
private Map<Long, List<Classes>> buildChildrenMap(List<Classes> classesList) { return classesList.stream() .collect(Collectors.groupingBy(Classes::getParentId)); }
private void fillChildren(List<Classes> nodes, Map<Long, List<Classes>> childrenMap) { for (Classes node : nodes) { List<Classes> children = node.getChildrenList(); if (children != null && !children.isEmpty()) { for (Classes child : children) { child.setChildrenList(childrenMap.getOrDefault(child.getClassId(), Collections.emptyList())); fillChildren(child.getChildrenList(), childrenMap); } } } }
|