/**
* 使用递归方法构建分区树
* @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;
}
list组装转化为树形结构list
猜你喜欢
转载自blog.csdn.net/m1195900241/article/details/125067627
今日推荐
周排行