guanxf

          我的博客:http://blog.sina.com.cn/17learning

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            71 隨筆 :: 1 文章 :: 41 評論 :: 0 Trackbacks

          2020年9月7日 #


          createTree(1, orgNodeTree, sameOrgNodes, 0);


          @NoArgsConstructor
          @AllArgsConstructor
          @Getter
          @Setter
          public class NodeTree {
          private String pName;
          private String name;
          private int level;
          private List<NodeTree> children;
          }

          private void createTree(int leave, int ind, Map<String, NodeTree> pIndexNodeNameMap, List<NodeVo> childNodes) {
          Map<String, NodeTree> cIndexNodeNameMap = new HashMap();
          //構建樹
          int treeNo = pIndexNodeNameMap.size();
          if (treeNo == 0) {
          return;
          }
          int group = 0;
          for (int i = ind; i < childNodes.size(); i++) {
          NodeVo node = childNodes.get(i);
          long index = node.getId() % treeNo;
          NodeTree pNode = pIndexNodeNameMap.get(index + "");
          List<NodeTree> children = pNode.getChildren();
          if (CollectionUtils.isEmpty(children)) {
          children = new ArrayList();
          }
          if (children.size() > 2) {
          leave++;
          createTree(leave, i, cIndexNodeNameMap, childNodes);
          break;
          } else {
          NodeTree child = new NodeTree();
          child.setLevel(leave);
          child.setPName(pNode.getName());
          child.setName(node.getNodeName());
          children.add(child);
          pNode.setChildren(children);
          cIndexNodeNameMap.put(group + "", child);
          group++;
          }
          }
          }


          private boolean createTree(int level, List<NodeTree> parentNodes, List<NodeVo> childNodes, int beginIndex) {
          //構建樹
          List<NodeTree> nextLevelNodes = new ArrayList<>();
          for (int i = beginIndex; i < childNodes.size(); i++) {
          int parentCount = 1;
          for (NodeTree pNode : parentNodes) {
          List<NodeTree> children = pNode.getChildren();
          if (CollectionUtils.isEmpty(children)) {
          children = new ArrayList();
          pNode.setChildren(children);
          }
          if (children.size() >= 3) {
          if(parentCount >= parentNodes.size()){
          return createTree(++level, nextLevelNodes, childNodes, beginIndex);
          }
          } else {
          if (beginIndex >= childNodes.size()) {
          return true;
          }
          NodeTree child = new NodeTree();
          child.setLevel(level);
          child.setPName(pNode.getName());
          NodeVo node = childNodes.get(beginIndex);
          child.setName(node.getNodeName());
          pNode.getChildren().add(child);
          nextLevelNodes.add(child);
          beginIndex++;
          }
          parentCount++;
          }
          }
          return true;
          }
          posted @ 2020-09-07 09:56 管先飛 閱讀(259) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 河曲县| 晋宁县| 金平| 东乌珠穆沁旗| 阿城市| 楚雄市| 云和县| 元朗区| 雷州市| 涿州市| 丹江口市| 平乐县| 色达县| 三门峡市| 南木林县| 高要市| 景德镇市| 松江区| 五大连池市| 克东县| 神池县| 清水县| 仪陇县| 松江区| 绥德县| 安义县| 定边县| 池州市| 兰州市| 桦川县| 随州市| 赤峰市| 翁源县| 江华| 江陵县| 万山特区| 稷山县| 闽清县| 商河县| 荣昌县| 安仁县|