zoukankan      html  css  js  c++  java
  • 树级节点封装工具类

    实体类

    package com.ruoyi.common.core.domain;
    
    import java.io.Serializable;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @author: 程鹏
     * @date: 2021-06-28 16:44
     * @Description:  树形组件通用对象
     */
    public class TreeItem implements Serializable {
        private String id;
        private String pId;
        private String name;
        private boolean checked;
        private String title;
        private List<TreeItem> children = new ArrayList<>();
    
        public TreeItem(String id, String pId, String name, boolean checked, String title) {
            this.id = id;
            this.pId = pId;
            this.name = name;
            this.checked = checked;
            this.title = title;
        }
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getpId() {
            return pId;
        }
    
        public void setpId(String pId) {
            this.pId = pId;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public boolean isChecked() {
            return checked;
        }
    
        public void setChecked(boolean checked) {
            this.checked = checked;
        }
    
        public String getTitle() {
            return title;
        }
    
        public void setTitle(String title) {
            this.title = title;
        }
    
        public List<TreeItem> getChildren() {
            return children;
        }
    
        public void setChildren(List<TreeItem> children) {
            this.children = children;
        }
    }
    

    工具类

    package com.ruoyi.common.utils;
    
    
    import com.ruoyi.common.core.domain.TreeItem;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.stream.Collectors;
    
    /**
     * @author: 程鹏
     * @date: 2021-06-28 16:37
     * @Description: 树形组件数据封装工具   多个父节点
     */
    public class TreeUtil {
    
        private volatile static TreeUtil INSTANCE;
    
        // 构造方法私有化
        private TreeUtil() {
    
        }
        // 获取树工具单例 (DCL单例)
        public static TreeUtil getInstance() {
            if (INSTANCE == null) {
                synchronized (TreeUtil.class) {
                    if (INSTANCE == null) {
                        INSTANCE = new TreeUtil();
                    }
                }
            }
            return INSTANCE;
        }
        public TreeItem enquireTree(List<TreeItem> treeItemList) {
            if (treeItemList.isEmpty()) {
                return null;
            }
            // 过滤空对象
            List<TreeItem> treeItems = treeItemList.stream().filter(treeItem -> treeItem != null).collect(Collectors.toList());
            // 存储 id treeItem
            HashMap<String, TreeItem> itemMap = new HashMap<>();
            treeItems.forEach(treeItem -> {
                // k值为 树节点几点id
                itemMap.put(treeItem.getId(), treeItem);
            });
            // 声明一个变量存放根节点
            TreeItem root = null;
            // 遍历父节点
            // 数据组装
            for (TreeItem treeItem : treeItems) {
                String pid = treeItem.getpId();
                if ("0".equals(pid)) {
                    // 说明该节点为根节点
                    root = treeItem;
                    continue;
                }
                // 获取父节点ip
                TreeItem parent = itemMap.get(pid);
                parent.getChildren().add(treeItem);
            }
            return root;
        }
    
    
    }
    
  • 相关阅读:
    [haoi2009]逆序对数列
    [haoi2008]木棍分割
    【LibreOJ 6277】数列分块入门 1 (分块)
    【模板】 最大流模板(ISAP)
    【模板】最大流模板(dinic)
    [模板] zkw线段树
    [luogu P1962] 斐波那契数列(带快速幂矩阵乘法模板)
    [SCOI2010] 股票交易 (单调队列优化dp)
    [luogu P2285] [HNOI2004]打鼹鼠
    [poj 2152] fire (树形dp)
  • 原文地址:https://www.cnblogs.com/pengcool/p/15611075.html
Copyright © 2011-2022 走看看