//javabean public class OrganizationInfos implements Serializable { private static final long serialVersionUID = 2212534990471143810L; //屬性··· }
//DAO @Query(value = "SELECT * FROM organization_infos where PARENT_ID not in (select ORGANIZATION_ID from organization_infos)", nativeQuery = true) List<OrganizationInfos> topOrganization();
//impl
public List<OrganizationInfos> organizationTree() { List<OrganizationInfos> roots = getList(); Map<String, List<OrganizationInfos>> parentsGroup = roots.stream().filter(node -> node.getParentId() != null).collect(Collectors.groupingBy(OrganizationInfos::getParentId)); List<OrganizationInfos> organizationInfos = organizationDao.topOrganization(); // List<OrganizationInfos> organizationInfos = // roots.stream().filter(node -> node.getParentId() == null).collect(Collectors.toList()); ArrayList<OrganizationInfos> parentNodes = new ArrayList<>(organizationInfos); for (int i = 0; i < parentNodes.size(); i++) { OrganizationInfos parentNode = parentNodes.get(i); List<OrganizationInfos> childNodes = parentsGroup.get(parentNode.getOrganizationId()); if (childNodes != null) { parentNode.setChildren(childNodes); parentNodes.addAll(childNodes); } } return organizationInfos; }