zoukankan      html  css  js  c++  java
  • 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;
        }
    
    认真可以把事情做对,而用心却可以做到完美
  • 相关阅读:
    Codeforces 449D:Jzzhu and Numbers
    51nod 1040:最大公约数之和
    51nod 1179:最大的最大公约数
    51nod 1406:与查询
    51nod 1354:选数字
    51nod 1616:最小集合
    Codeforces:Colored Balls
    素性测试
    秒转换成年月日时分秒 和复制文本到剪贴板
    vue项目中获取cdn域名插件
  • 原文地址:https://www.cnblogs.com/fangh816/p/13295339.html
Copyright © 2011-2022 走看看