list组装转化为树形结构list
/** * 使用递归方法构建分区树 * @param dtoList * @param level0Root * @return */ public static List<DtoList> buildDmaTree(List<DtoList> dtoList, boolean level0Root) { List<DtoList> trees = new ArrayList<>(); List<Integer> rootIdList = (level0Root ? getDmaLvl0Root(dtoList): getDmaInfoRoots(dtoList)); for (DtoList dto : dtoList) { if (rootIdList.contains(dto.getId())) { trees.add(findDmaChildren(dto, dtoList)); } } return trees; } /** * 查找分区根节点(直接根据父节点ID来判断) * * @param dtoList */ private static List<Integer> getDmaLvl0Root(List<DtoList> dtoList) { List<Integer> rootIdList = new ArrayList<>(); for(DtoList dto : dtoList) { if(dto.getXdiLevel() == 0) { rootIdList.add(dto.getId()); break; } } return rootIdList; } /** * 查找分区根节点(因用户权限的原因,所以不能直接根据父节点ID来判断) * * @param dtoList */ private static List<Integer> getDmaInfoRoots(List<DtoList> dtoList) { List<Integer> rootIdList = new ArrayList<>(); Map<Integer, DtoList> dtoMap = dtoList.stream().collect(Collectors.toMap(DtoList::getId, v -> v, (v1, v2) -> v1)); for(DtoList dto : dtoList) { if(dto.getParentId() <= 0) { rootIdList.add(dto.getId()); continue; } if(!dtoMap.containsKey(dto.getParentId())) { rootIdList.add(dto.getId()); continue; } } return rootIdList; } /** * 递归查找分区子节点 * @param dtoList * @return */ private static DtoList findDmaChildren(DtoList dto, List<DtoList> dtoList) { for (DtoList it : dtoList) { if(it.getParentId() > 0 && dto.getId().equals(it.getParentId())) { dto.setLeaf(false); dto.getChildren().add(findDmaChildren(it, dtoList)); } } if(dto.getChildren().size() <= 0) { dto.setChildren(null); } return dto; }