TreeUtil

先定义一个Tree对象,不同的Response去继承这个对象

package com.izkml.mlyun.framework.common.utils.tree;

import java.util.ArrayList;
import java.util.List;

public class Tree {
    protected List children = new ArrayList();
    protected List parent = new ArrayList();

    public Tree() {
    }

    protected Object getTreeId() {
        return null;
    }

    protected Object getTreeParentId() {
        return null;
    }

    public List getParentList() {
        return this.parent;
    }

    public List getChildren() {
        return this.children;
    }

    protected boolean topParentId() {
        return "0".equals(this.getTreeParentId());
    }
}

封装通用的树结构工具类

package com.izkml.mlyun.framework.common.utils.tree;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Consumer;

public class TreeUtils {
    public TreeUtils() {
    }

    public static <T> List<T> tree(List<T> treeList) {
        return tree((List)treeList, (Consumer)null);
    }

    public static <T> List<T> tree(List<T> treeList, Consumer<Tree> afterAddChildren) {
        List<T> resultList = new ArrayList();
        Iterator var3 = treeList.iterator();

        while(var3.hasNext()) {
            T object = var3.next();
            Tree tree = (Tree)object;
            if(tree.topParentId()) {
                resultList.add(tree);
                treeRecursion(tree, treeList, afterAddChildren);
            }
        }

        return resultList;
    }

    public static <T> T tree(Tree TopTree, List<T> treeList) {
        treeRecursion(TopTree, treeList, (Consumer)null);
        return TopTree;
    }

    private static void treeRecursion(Tree nodeTree, List<Tree> treeList, Consumer<Tree> afterAddChildren) {
        Iterator var3 = treeList.iterator();

        while(var3.hasNext()) {
            Tree tree = (Tree)var3.next();
            if(nodeTree.getTreeId().equals(tree.getTreeParentId())) {
                nodeTree.getChildren().add(tree);
                treeRecursion(tree, treeList, afterAddChildren);
            }
        }

        if(afterAddChildren != null) {
            afterAddChildren.accept(nodeTree);
        }

    }

    public static <T> List<T> treeDesc(Tree nodeTree, List<T> treeList, Consumer<Tree> afterAddChildren) {
        List<T> resultList = new ArrayList();
        List<Map> strings = new ArrayList();
        resultList.add(nodeTree);
        if(!Objects.equals(nodeTree.getTreeParentId(), "0")) {
            getParentNode(nodeTree, treeList, afterAddChildren, strings);
            resultList.addAll(Arrays.asList(new List[]{strings}));
        }

        return resultList;
    }

    public static void getParentNode(Tree nodeTree, List<Tree> treeList, Consumer<Tree> afterAddChildren, List<Map> strings) {
        Iterator var4 = treeList.iterator();

        while(var4.hasNext()) {
            Tree tree = (Tree)var4.next();
            if(Objects.equals(nodeTree.getTreeParentId(), tree.getTreeId())) {
                nodeTree.getParentList().add(tree);
                Map nodeMap = new HashMap();
                nodeMap.put("parentList", nodeTree.getTreeId().toString());
                strings.add(nodeMap);
                getParentNode(tree, treeList, afterAddChildren, strings);
            }
        }

        if(afterAddChildren != null) {
            afterAddChildren.accept(nodeTree);
        }

    }
}

递归-根据id获取所有相关联的id

/**
 * @param ms
 * @param id
 * @param ids
 * @return
 * @Author: Fangh
 * @Date: 2020-06-30 15:58:56
 * @Description: 递归-根据id获取所有相关联的id
 **/
private List<Integer> getIds(List<Organ> ms, int id, List<Integer> ids) {
    for (int i = 0; i < ms.size(); i++) {
        if (ms.get(i).getManagementId() == id) {
            ids.add(ms.get(i).getId());
            getIds(ms, ms.get(i).getId(), ids);
        }
    }
    return ids;
}
    /**
     * @param departmentResponse
     * @param departmentResponses
     * @param ids
     * @return
     * @Author: Fangh
     * @Date: 2020-08-25 16:38:21
     * @Description: 通过当前子节点递归所有的父节点id
     **/
    private DepartmentResponse getParentDepartmentResponse(DepartmentResponse departmentResponse, List<DepartmentResponse> departmentResponses, List<String> ids) {
        if ("0".equals(departmentResponse.getParentId())) {
            return departmentResponse;
        }
        DepartmentResponse tbldepartmentResponse = departmentResponses.stream().filter(
                x -> Objects.equals(x.getId(), departmentResponse.getParentId()
                )
        ).findFirst().get();
        ids.add(tbldepartmentResponse.getId());
        departmentResponses.remove(tbldepartmentResponse);
        return getParentDepartmentResponse(tbldepartmentResponse, departmentResponses, ids);
    }
    /**
     * @param unitId
     * @param departments
     * @return
     * @Author: Fangh
     * @Date: 2020-08-25 16:38:21
     * @Description: 通过当前子节点递归所有的父节点id
     **/
    private List<String> getChildList(String unitId, List<Department> departments) {
        List<String> ids = new ArrayList<>(10);
        ids.add(unitId);
        for (Department department : departments) {
            if (Objects.equals(unitId, department.getParentId())) {
                ids.add(department.getId());
                departments.remove(department);
                getChildList(department.getId(), departments);
            }
        }
        return ids;
    }
认真可以把事情做对,而用心却可以做到完美
原文地址:https://www.cnblogs.com/fangh816/p/13295339.html