java 递归树json

适用于父子关系的数据结构。

@Override
    public List<InfoFloorTreeVo> list(FloorRequest request) {
        // TODO Auto-generated method stub
        List<InfoFloor> infoFloorList = infoFloorMapper.selectLikeByName(request);
        List<InfoFloorTreeVo> treeNodes = new ArrayList<>();
        InfoFloorTreeVo treeNode = null;

        for (InfoFloor infoFloor : infoFloorList) {
            treeNode = new InfoFloorTreeVo();
            treeNode.setId(infoFloor.getFloorId());
            treeNode.setName(infoFloor.getName());
            treeNode.setUrl(infoFloor.getUrl());
            treeNode.setWidth(infoFloor.getWidth());
            treeNode.setHeight(infoFloor.getHeight());
            treeNode.setParentId(infoFloor.getParentId());
            treeNodes.add(treeNode);
        }
        recursiveFloor(treeNodes);
        List<InfoFloorTreeVo> infoFloorTreeVos = new ArrayList<>();
        for (InfoFloorTreeVo infoFloorTreeVo : treeNodes) {
            if (infoFloorTreeVo.getParentId() == null) {
                infoFloorTreeVos.add(infoFloorTreeVo);
            }
        }
        return infoFloorTreeVos;
    }
 

public void recursiveFloor(List<InfoFloorTreeVo> treeNodes) {
        InfoRegion record = null;
        for (InfoFloorTreeVo infoFloorTreeVo : treeNodes) {
            List<InfoFloor> floors = infoFloorMapper.selectFloorByParentId(infoFloorTreeVo.getId());
            if (floors.size() > 0 || infoFloorTreeVo.getParentId() != null && infoFloorTreeVo.getParentId() > 0) {
                findFloorChildren(treeNodes, infoFloorTreeVo);
            }
            // records
            record = new InfoRegion();
            record.setFloorId(infoFloorTreeVo.getId());
            List<InfoRegion> infoRegionList = infoRegionMapper.select(record);
            List<InfoRegionTreeVo> regionTreeNodes = convertInfoRegionTreeVo(infoRegionList);
            recursiveRegion(regionTreeNodes);
            regionTreeNodes = removeOtherChildren(regionTreeNodes);
            infoFloorTreeVo.setRegions(regionTreeNodes);
        }
    }

public List<InfoRegionTreeVo> removeOtherChildren(List<InfoRegionTreeVo> regionTreeNodes) {
        List<InfoRegionTreeVo> treeVos = new ArrayList<>();
        for (InfoRegionTreeVo infoRegionTreeVo : regionTreeNodes) {
            if (infoRegionTreeVo.getParentId() == null) {
                treeVos.add(infoRegionTreeVo);
            }
        }
        return treeVos;
    }

public InfoFloorTreeVo findFloorChildren(List<InfoFloorTreeVo> treeNodes, InfoFloorTreeVo treeVo) {
        List<InfoFloorTreeVo> currentChild = null;
        InfoRegion record = null;
        for (InfoFloorTreeVo infoFloorTreeVo : treeNodes) {
            if (infoFloorTreeVo.getParentId() != null
                    && treeVo.getId().intValue() == infoFloorTreeVo.getParentId().intValue()) {
                currentChild = treeVo.getChildren();
                if (currentChild == null) {
                    currentChild = new ArrayList<>();
                }
                if (!currentChild.contains(infoFloorTreeVo)) {
                    // records
                    record = new InfoRegion();
                    record.setFloorId(infoFloorTreeVo.getId());
                    List<InfoRegion> infoRegionList = infoRegionMapper.select(record);
                    List<InfoRegionTreeVo> regionTreeNodes = convertInfoRegionTreeVo(infoRegionList);
                    recursiveRegion(regionTreeNodes);
                    regionTreeNodes = removeOtherChildren(regionTreeNodes);
                    infoFloorTreeVo.setRegions(regionTreeNodes);
                    currentChild.add(findFloorChildren(treeNodes, infoFloorTreeVo));
                    treeVo.setChildren(currentChild);
                }
            }
        }
        return treeVo;
    }

public List<InfoRegionTreeVo> recursiveRegion(List<InfoRegionTreeVo> treeNodes) {
        List<InfoRegionTreeVo> trees = new ArrayList<>();
        for (InfoRegionTreeVo infoRegionTreeVo : treeNodes) {
            InfoRegion infoRegion = new InfoRegion();
            infoRegion.setParentId(infoRegionTreeVo.getRegionId());
            List<InfoRegion> infoRegions = infoRegionMapper.select(infoRegion);
            if (infoRegions.size() > 0
                    || infoRegionTreeVo.getParentId() != null && infoRegionTreeVo.getParentId() > 0) {
                findRegionChildren(treeNodes, infoRegionTreeVo);
            }
        }
        return trees;
    }

    public static InfoRegionTreeVo findRegionChildren(List<InfoRegionTreeVo> treeNodes, InfoRegionTreeVo treeVo) {
        List<InfoRegionTreeVo> currentChild = null;
        for (InfoRegionTreeVo infoRegionTreeVo : treeNodes) {
            if (infoRegionTreeVo.getParentId() != null
                    && treeVo.getRegionId().intValue() == infoRegionTreeVo.getParentId().intValue()) {
                currentChild = treeVo.getChildren();
                if (currentChild == null) {
                    currentChild = new ArrayList<>();
                }
                if (!currentChild.contains(infoRegionTreeVo)) {
                    currentChild.add(findRegionChildren(treeNodes, infoRegionTreeVo));
                    treeVo.setChildren(currentChild);
                }
            }
        }
        return treeVo;
    }

    public List<InfoRegionTreeVo> convertInfoRegionTreeVo(List<InfoRegion> infoRegionList) {
        List<InfoRegionTreeVo> infoRegionTreeVos = new ArrayList<>();
        InfoRegionTreeVo infoRegionTreeVo = null;
        for (InfoRegion infoRegion : infoRegionList) {
            infoRegionTreeVo = new InfoRegionTreeVo();
            infoRegionTreeVo.setName(infoRegion.getName());
            infoRegionTreeVo.setRegionId(infoRegion.getRegionId());
            infoRegionTreeVo.setParentId(infoRegion.getParentId());
            infoRegionTreeVos.add(infoRegionTreeVo);
        }
        return infoRegionTreeVos;
    }

如此这般tree就形成了。

猜你喜欢

转载自blog.csdn.net/m0_37598953/article/details/88022116
今日推荐