Java 节点树相关方法

155 阅读1分钟



/**
 * 递归获取父级ids
 * @param
 * @param id
 * @param
 */
private void getParentTaxCompanyIds(List<ToolsTag> tagList, Long id, List<Long> parentIds) {
    for (ToolsTag taxCompany : tagList) {
        if (taxCompany.getParentNodeId() == 1) {
            continue;
        }
        //判断是否有父节点
        if (Objects.equals(id, taxCompany.getId())) {
            parentIds.add(taxCompany.getParentNodeId());
            getParentTaxCompanyIds(tagList, taxCompany.getParentNodeId(), parentIds);
        }
    }
}

private void getChildIds(Long id, List<Long> childIds, List<ToolsTag> tagList) {
    for (ToolsTag tag : tagList) {
        // 判断是否存在子节点
        if (Objects.equals(id, tag.getId())) {
            childIds.add(tag.getId());
            // 递归遍历下一级
            getChildIds(tag.getId(), childIds, tagList);
        }
    }
}


public List<ToolsTag> treeMenuList(List<ToolsTag>  treeNodes ,Long pid
        , List<Long> lastChildNode , List<Long> childNode) {

    List<ToolsTag> tempTreeNode =  new  ArrayList<ToolsTag>();
    List<ToolsTag> tempTreeNode1 =  new  ArrayList<ToolsTag>();
    for(ToolsTag node : treeNodes) {
        if(Objects.equals(node.getParentNodeId(), pid)) {
            //说明存在子节点
            tempTreeNode1 = treeMenuList(treeNodes,node.getId(), lastChildNode, childNode);
            if(tempTreeNode1.isEmpty()) {
                //不存在子节点
                lastChildNode.add(node.getId());
            }
            childNode.add(node.getId());
            //用于让上一级判断是否存在子节点
            //因为存在子节点则tempTreeNode不为空
            //函数结束后返回tempTreeNode给上一级以供判断
            tempTreeNode.add(node);
            System.out.println("当前节点存在子节点");
        }
    }
    return tempTreeNode;
}