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;
        }
    
    认真可以把事情做对,而用心却可以做到完美
  • 相关阅读:
    HDU 5313 bitset优化背包
    bzoj 2595 斯坦纳树
    COJ 1287 求匹配串在模式串中出现的次数
    HDU 5381 The sum of gcd
    POJ 1739
    HDU 3377 插头dp
    HDU 1693 二进制表示的简单插头dp
    HDU 5353
    URAL 1519 基础插头DP
    UVA 10294 等价类计数
  • 原文地址:https://www.cnblogs.com/fangh816/p/13295339.html
Copyright © 2011-2022 走看看