zoukankan      html  css  js  c++  java
  • java实现树状图

    1.定义测试数据类 VirtualDataGenerator;

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


    public class VirtualDataGenerator {
      public static List getVirtualResult() {
        List dataList = new ArrayList();

        HashMap dataRecord1 = new HashMap();
        dataRecord1.put("id", "112000");
        dataRecord1.put("name", "廊坊银行解放道支行");
        dataRecord1.put("parentId", "110000");

        HashMap dataRecord2 = new HashMap();
        dataRecord2.put("id", "112200");
        dataRecord2.put("name", "廊坊银行三大街支行");
        dataRecord2.put("parentId", "112000");

        HashMap dataRecord3 = new HashMap();
        dataRecord3.put("id", "112100");
        dataRecord3.put("name", "廊坊银行广阳道支行");
        dataRecord3.put("parentId", "112000");

        HashMap dataRecord4 = new HashMap();
        dataRecord4.put("id", "113000");
        dataRecord4.put("name", "廊坊银行开发区支行");
        dataRecord4.put("parentId", "110000");

        HashMap dataRecord5 = new HashMap();
        dataRecord5.put("id", "100000");
        dataRecord5.put("name", "廊坊银行总行");
        dataRecord5.put("parentId", "");

        HashMap dataRecord6 = new HashMap();
        dataRecord6.put("id", "110000");
        dataRecord6.put("name", "廊坊分行");
        dataRecord6.put("parentId", "100000");

        HashMap dataRecord7 = new HashMap();
        dataRecord7.put("id", "111000");
        dataRecord7.put("name", "廊坊银行金光道支行");
        dataRecord7.put("parentId", "110000");

        dataList.add(dataRecord1);
        dataList.add(dataRecord2);
        dataList.add(dataRecord3);
        dataList.add(dataRecord4);
        dataList.add(dataRecord5);
        dataList.add(dataRecord6);
        dataList.add(dataRecord7);

        return dataList;
      }
    }

    2.定义节点类 Node;

    public class Node {
      /**
      * 节点内容
      */
      public String name;


      /**
      * 父节点编号
      */
      public String parentId;


      /**
      * 孩子节点列表
      */
      private Children children = new Children();

      // 先序遍历,拼接JSON字符串
      public String toString() {
        String result = "{" + "id : '" + id + "'" + ", name : '" + name + "'";

        if (children != null && children.getSize() != 0) {
          result += ", children : " + children.toString();
        } else {
          result += ", leaf : true";
        }

        return result + "}";
      }

      // 兄弟节点横向排序
      public void sortChildren() {
        if (children != null && children.getSize() != 0) {
          children.sortChildren();
        }
      }

      // 添加孩子节点
      public void addChild(Node node) {
        this.children.addChild(node);
      }
    }

    3.定义孩子类 Children;

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.Iterator;
    import java.util.List;

    public class Children {

      private List list = new ArrayList();

      public int getSize() {
        return list.size();
      }

      public void addChild(Node node) {
        list.add(node);
      }

      // 拼接孩子节点的JSON字符串
      public String toString() {
        String result = "[";
        for (Iterator it = list.iterator(); it.hasNext();) {
          result += ((Node) it.next()).toString();
          result += ",";
        }
        result = result.substring(0, result.length() - 1);
        result += "]";
        return result;
      }

      // 孩子节点排序
      public void sortChildren() {
        // 对本层节点进行排序
        // 可根据不同的排序属性,传入不同的比较器,这里传入ID比较器
        Collections.sort(list, new NodeIDComparator());
        // 对每个节点的下一层节点进行排序
        for (Iterator it = list.iterator(); it.hasNext();) {
          ((Node) it.next()).sortChildren();
        }
      }
    }

    /**
    * 节点比较器
    */
    class NodeIDComparator implements Comparator {
      // 按照节点编号比较
      public int compare(Object o1, Object o2) {
        int j1 = Integer.parseInt(((Node) o1).id);
        int j2 = Integer.parseInt(((Node) o2).id);
        return (j1 < j2 ? -1 : (j1 == j2 ? 0 : 1));
      }
    }

    4.最后添加测试类进行测试 Test;

    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;

    public class Test {
      public static void main(String[] args) {
        // 读取层次数据结果集列表
        List dataList = VirtualDataGenerator.getVirtualResult();
        // 节点列表(散列表,用于临时存储节点对象)
        HashMap nodeList = new HashMap();
        // 根节点
        Node root = null;
        // 根据结果集构造节点列表(存入散列表)
        for (Iterator it = dataList.iterator(); it.hasNext();) {
          Map dataRecord = (Map) it.next();
          Node node = new Node();
          node.id = (String) dataRecord.get("id");
          node.name = (String) dataRecord.get("name");
          node.parentId = (String) dataRecord.get("parentId");
          nodeList.put(node.id, node);
        }
        // 构造无序的多叉树
        Set entrySet = nodeList.entrySet();
        for (Iterator it = entrySet.iterator(); it.hasNext();) {
          Node node = (Node) ((Map.Entry) it.next()).getValue();
          if (node.parentId == null || node.parentId.equals("")) {
            root = node;
          } else {
            ((Node) nodeList.get(node.parentId)).addChild(node);
          }
        }
        // 输出无序的树形菜单的JSON字符串
        System.out.println(root.toString());
        // 对多叉树进行横向排序
        root.sortChildren();
        // 输出有序的树形菜单的JSON字符串
        System.out.println(root.toString());
      }
    }

  • 相关阅读:
    laravel 服务提供者
    乐观锁和悲观锁
    MySQL索引原理及慢查询优化
    Laravel Session保存机制和terminate中间件
    laravel session踩坑
    理解 JavaScript 的 async/await(转)
    知识点
    js异步
    Office使用笔记
    YUM常用命令
  • 原文地址:https://www.cnblogs.com/qinjf/p/8196335.html
Copyright © 2011-2022 走看看