<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Java構建樹結構的公共方法

      一、前提

      • pId需要傳入用來確認第一級的父節點,而且pId可以為null。
      • 樹實體類必須實現:TreeNode接口
      • MyTreeVo必須有這三個屬性:id、pId、children
      • 可以根據不同需求,配置TreeNode和MyTreeVo中固定的屬性

      二、代碼

      • 定義TreeNode接口
      public interface TreeNode {
          String getId();
          String getpId();
          List getChildren();
      }
      

      • 需要將pId作為參數傳入,在方法中添加一個pId參數,用于確認第一級的父節點。
        -- 這個示例代碼中,buildTree方法接收兩個參數,一個是泛型類型的參數List,另一個是pId,用于確認第一級的父節點。在找到所有的根節點后,我們需要對每個根節點調用buildChildren方法,遞歸構建子節點。
        -- 以便支持傳入的pId作為頂級節點
      public class TreeBuilder {
          /**
           * @param nodes 需要構建的nodes,不要繼承 TreeNode,且需要有 TreeNode 下的三個方法
           * @param pId 父id。為null則是所有pid為null的是頂級節點;不為null,則是從給的pId往下查詢并構建樹
           **/
          public static <T extends TreeNode> List<T> buildTree(List<T> nodes, String pId) {
              List<T> roots = new ArrayList<>();
              for (T node : nodes) {
                  if (node.getId().equals(pId) || (node.getParentId() == null && (pId == null || pId.equals(node.getId())))) {
                      roots.add(node);
                  }
              }
              for (T root : roots) {
                  buildChildren(root, nodes);
              }
              return roots;
          }
      
          private static <T extends TreeNode> void buildChildren(T node, List<T> nodes) {
              for (T child : nodes) {
                  if (child.getParentId() != null && child.getParentId().equals(node.getId())) {
                      node.getChildren().add(child);
                      buildChildren(child, nodes);
                  }
              }
          }
      }
      

      • 構建到幾級
        -- 如果再增加一個參數,構建到樹的第幾層該如何實現?
        -- 根據需求,如果增加一個參數來控制構建到樹的第幾層,可以在buildChildren方法中添加一個level參數,用于記錄當前節點的層數。在遞歸構建子節點時,如果當前節點的層數小于指定的層數,則繼續遞歸構建子節點,否則停止遞歸。以下是修改后的Java示例代碼:
      public class TreeBuilder {
           
           /**
            * @param level 級別 從1開始。1是最頂層
            **/
          public static <T extends TreeNode> List<T> buildTree(List<T> nodes, String pId, int level) {
              List<T> roots = new ArrayList<>();
              for (T node : nodes) {
                  if (node.getId().equals(pId) || (node.getParentId() == null && (pId == null || pId.equals(node.getId())))) {
                      roots.add(node);
                  }
              }
              for (T root : roots) {
                  buildChildren(root, nodes, level, 1);
              }
              return roots;
          }
      
          private static <T extends TreeNode> void buildChildren(T node, List<T> nodes, int level, int currentLevel) {
              if (currentLevel >= level) {
                  return;
              }
              for (T child : nodes) {
                  if (child.getParentId() != null && child.getParentId().equals(node.getId())) {
                      if (node.getChildren() == null) {
                          node.setChildren(new ArrayList<>());
                      }
                      node.getChildren().add(child);
                      buildChildren(child, nodes, level, currentLevel + 1);
                  }
              }
          }
      }
      
      

      三、使用

      1、實現TreeNode接口

      public class MyTreeVo implements TreeNode {
      
          /**
           * 主鍵
           */
          private String id;
      
          /**
           * 父節點ID
           */
          private String pId;
      
          /**
           * 子級
           */
          private List<MyTreeVo> children = Lists.newArrayList();
      
          //其他屬性……
      
          public List<MyTreeVo> getChildren() {
              return children;
          }
      
          public String getId() {
              return id;
          }
      
          public String getpId() {
              return pId;
          }
      
          //其他屬性的getter、setter……
      

      2、使用

      -- pId可以傳入null,也可以傳入需要從哪個節點(X)開始構造的 X的id
      -- pId比如可以傳入3、樣例中的 “二、噢噢噢噢”的id=“e6ee51485389495cb923a122be800012”。然后構建出來的,就是“二、噢噢噢噢”的下級樹

      List<MyTreeVo> tree = TreeUtilQz.buildTree(vos,null);
      //tree就是構建好的樹結構數據
      

      3、樣例

      {
          "data": [
              {
                  "id": "e6ee51485389495cb923a122be800011",
                  "pId": "",
                  "name": "一、鋼管鋼管",
                  "children": [
                      {
                          "id": "e6ee51485389495cb923a122be800014",
                          "pId": "e6ee51485389495cb923a122be800011",
                          "name": "(二)嘎嘎嘎嘎嘎",
                          "children": []
                      },
                      {
                          "id": "e6ee51485389495cb923a122be800013",
                          "pId": "e6ee51485389495cb923a122be800011",
                          "name": "(一)頂頂頂頂",
                          "children": []
                      }
                  ]
              },
              {
                  "id": "e6ee51485389495cb923a122be800012",
                  "pId": "",
                  "name": "二、噢噢噢噢",
                  "children": [
                      {
                          "id": "e6ee51485389495cb923a122be800015",
                          "pId": "e6ee51485389495cb923a122be800012",
                          "name": "二的下級",
                          "children": [
                              {
                                  "id": "e6ee51485389495cb923a122be800016",
                                  "pId": "e6ee51485389495cb923a122be800015",
                                  "name": "二的下級的下級",
                                  "children": []
                              }
                          ]
                      }
                  ]
              }
          ]
      }
      

      posted on 2023-04-12 16:35  C_C_菜園  閱讀(572)  評論(4)    收藏  舉報

      導航

      主站蜘蛛池模板: 好男人社区影视在线WWW| 亚洲国产区男人本色| 五月丁香啪啪| 中文字幕第一页国产| 成人欧美日韩一区二区三区| 九九热在线免费视频播放| 97人妻天天摸天天爽天天| 日韩熟女熟妇久久精品综合| 亚洲人成电影网站 久久影视| 无码国产一区二区三区四区| 伊人春色激情综合激情网| 亚洲av成人免费在线| 人妻熟女欲求不满在线| 色综合久久婷婷88| 国产综合色在线精品| 蓝田县| 亚洲人成电影网站 久久影视| 中文字幕国产精品综合| 蓬安县| 亚洲青青草视频在线播放| 国产成人免费高清激情视频| 在线涩涩免费观看国产精品| 亚洲欧洲日产国码无码网站| 日本免费最新高清不卡视频| 高阳县| 99久久亚洲综合精品成人网| 国内精品伊人久久久久影院对白| 亚洲一区二区中文字幕| 国产精品va无码一区二区 | 99精品热在线在线观看视| 性中国videossexo另类| 亚洲第一国产综合| 在线播放国产女同闺蜜| 国产视频最新| 欧洲精品一区二区三区久久| 熟妇人妻av中文字幕老熟妇| 她也色tayese在线视频| 大地资源中文第二页日本| 亚洲第一极品精品无码久久| 无码天堂亚洲国产av麻豆| 久久久av男人的天堂|