1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          使用HutoUtil 中TreeUtil進行樹形結構操作

          來源:互聯網轉載 時間:2024-01-29 08:08:41

          使用HutoUtil 中TreeUtil進行樹形結構操作(可直接運行)

          pom.xml

          <dependency>    <groupId>cn.hutool</groupId>    <artifactId>hutool-all</artifactId>    <version>5.4.6</version></dependency>

          實體類

          @Data@Accessors(chain = true)public class TreeDemo {    private Integer id;    private Integer parentId;    private Integer level;    private String  levelName;    private Integer isEfficient;    private Integer isShow;    private String createdBy;    private Date createdDate;    private String updatedBy;    private Date updatedDate;}

          測試類

          import cn.hutool.core.lang.tree.Tree;import cn.hutool.core.lang.tree.TreeNodeConfig;import cn.hutool.core.lang.tree.TreeUtil;import cn.hutool.json.JSONUtil;import java.util.*;import java.util.function.Function;import java.util.stream.Collectors;/** * TODO 樹形結構測試 * @date 2021/12/22 11:41 */public class TestDemo {    public static void main(String[] args) {        List<TreeDemo> treeDemoList = new ArrayList<>();        treeDemoList=initTreeDemo();        // 1、將源數據轉化為樹        List<Tree<Integer>> build = transform(treeDemoList);        //2、通過子節點查找父節點        List<TreeDemo> parentList = childToParent(treeDemoList,build);        //3、通過父節點查找子節點        Tree<Integer> tree= parentToChile(build);    }    /**     *  1:初始化數據     */    public static List<TreeDemo> initTreeDemo(){        List<TreeDemo> treeDemoList = new ArrayList<>();        TreeDemo treeDemo  = new TreeDemo();        treeDemo.setId(1).setParentId(0).setLevel(1).setLevelName("A").setIsEfficient(1).setIsShow(1);        TreeDemo treeDemo1  = new TreeDemo();        treeDemo1.setId(2).setParentId(1).setLevel(2).setLevelName("B").setIsEfficient(1).setIsShow(1);        TreeDemo treeDemo2  = new TreeDemo();        treeDemo2.setId(3).setParentId(2).setLevel(3).setLevelName("C").setIsEfficient(1).setIsShow(1);        TreeDemo treeDemo3  = new TreeDemo();        treeDemo3.setId(4).setParentId(3).setLevel(4).setLevelName("D").setIsEfficient(1).setIsShow(1);        TreeDemo treeDemo4  = new TreeDemo();        treeDemo4.setId(5).setParentId(4).setLevel(5).setLevelName("E").setIsEfficient(1).setIsShow(1);        TreeDemo treeDemo5  = new TreeDemo();        treeDemo5.setId(6).setParentId(0).setLevel(1).setLevelName("A1").setIsEfficient(1).setIsShow(1);        TreeDemo treeDemo6  = new TreeDemo();        treeDemo6.setId(7).setParentId(6).setLevel(2).setLevelName("B1").setIsEfficient(1).setIsShow(1);        TreeDemo treeDemo7  = new TreeDemo();        treeDemo7.setId(8).setParentId(7).setLevel(3).setLevelName("C1").setIsEfficient(1).setIsShow(1);        TreeDemo treeDemo8  = new TreeDemo();        treeDemo8.setId(9).setParentId(8).setLevel(4).setLevelName("D1").setIsEfficient(1).setIsShow(1);        TreeDemo treeDemo9  = new TreeDemo();        treeDemo9.setId(10).setParentId(9).setLevel(5).setLevelName("E1").setIsEfficient(1).setIsShow(1);        TreeDemo treeDemo10  = new TreeDemo();        treeDemo10.setId(11).setParentId(7).setLevel(3).setLevelName("C2").setIsEfficient(1).setIsShow(1);        TreeDemo treeDemo11  = new TreeDemo();        treeDemo11.setId(12).setParentId(8).setLevel(4).setLevelName("D2").setIsEfficient(1).setIsShow(1);        TreeDemo treeDemo12  = new TreeDemo();        treeDemo12.setId(13).setParentId(9).setLevel(5).setLevelName("E2").setIsEfficient(1).setIsShow(1);        treeDemoList.add(treeDemo);        treeDemoList.add(treeDemo1);        treeDemoList.add(treeDemo2);        treeDemoList.add(treeDemo3);        treeDemoList.add(treeDemo4);        treeDemoList.add(treeDemo5);        treeDemoList.add(treeDemo6);        treeDemoList.add(treeDemo7);        treeDemoList.add(treeDemo8);        treeDemoList.add(treeDemo9);        treeDemoList.add(treeDemo10);        treeDemoList.add(treeDemo11);        treeDemoList.add(treeDemo12);        return treeDemoList;    }    /**     *  1.2:將源數據轉化為樹結構數據     */    public static List<Tree<Integer>> transform(List<TreeDemo> treeDemoList){        treeDemoList=initTreeDemo();        // 2.配置        TreeNodeConfig config = new TreeNodeConfig();        //默認為id可以不設置        config.setIdKey("id");        //默認為parentId可以不設置        config.setParentIdKey("parentId");        //最大遞歸深度        config.setDeep(5);        //排序字段        config.setWeightKey("level");        // 3.轉樹,Tree<>里面泛型為id的類型        List<Tree<Integer>> build = TreeUtil.build(treeDemoList, 0, config, (object, tree) -> {            // 也可以使用 tree.setId(object.getId());等一些默認值            tree.putExtra("id", object.getId());            tree.putExtra("parentId", object.getParentId());            tree.putExtra("level", object.getLevel());            tree.putExtra("levelName", object.getLevelName());            tree.putExtra("isEfficient", object.getIsEfficient());            tree.putExtra("isShow", object.getIsShow());        });        System.out.println("將源數據轉化為樹:"+JSONUtil.toJsonStr(build));        return build;    }    /**     * @desc  2.1 子節點查找父節點(此功能自己實現可以用treeUtil里面的getParentsName)     *     *  實現思路:1、獲取指定節點     *          2、將全部節點轉化為map,id做key     *          3、遞歸循環向上匹配 知道對象為空     */    public static List<TreeDemo> childToParent(List<TreeDemo> treeDemoList, List<Tree<Integer>> build){//定義指定節點        TreeDemo treeDemo9  = new TreeDemo();        treeDemo9.setId(10).setParentId(9).setLevel(5).setLevelName("E1").setIsEfficient(1).setIsShow(1);//通過set添加查找后的實體        final Set<TreeDemo> nodeList = new HashSet<>();//將源數據轉化為map        final Map<Integer, TreeDemo> allMap = treeDemoList.stream().collect(Collectors.toMap(TreeDemo::getId, Function.identity(), (v1, v2) -> v2));//        build.forEach(node -> {        findParent(nodeList, treeDemo9, allMap);//        });        List<TreeDemo> nodes = new ArrayList<>(nodeList);        System.out.println("子節點找父節點:"+JSONUtil.toJsonStr(nodes));        return nodes;    }    /**     * :2.2遞歸查找父節點     */    private static void findParent(Set<TreeDemo> nodeList, TreeDemo current, Map<Integer, TreeDemo> allMap) {        if (Objects.nonNull(current)) {            nodeList.add(current);        }        if (Objects.nonNull(current)) {            TreeDemo parent = allMap.get(current.getParentId());            findParent(nodeList, parent, allMap);        }    }    /**     * @desc  通過指定3:節點查找子節點     */    public static Tree<Integer> parentToChile( List<Tree<Integer>> build){        Tree<Integer> childNode = new Tree<>();        for(Tree node : build){            childNode=TreeUtil.getNode(node,6);            if(Objects.nonNull(childNode)){                break;            }        }        System.out.println("查找父節點及其子節點:"+JSONUtil.toJsonStr(childNode));        return childNode;    }
          標簽:tree lang-

          網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...

          在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...

          在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...

          如何在ppt中插入滾動的圖片和音樂?是什么樣子滾動的圖片,滾動的音樂是指從幻燈片開始一直播放到幻燈片結束??自動播放的話這在PPT中最普通啦,自定義動畫中直接設置動畫的開始時間,一般給對象添加動畫后默認的是點擊鼠標開始動畫,然后你可以自己改成從上一項開始,也可以自己定義動畫從什么時間開始播放~~ PPT如何使多張圖片在一張幻燈片中循環滾動播放?使PPT中一張幻燈片中的多張圖片循環播放的步驟:1、選...

          北京新東方現在地址在哪里?北京新東方地址:王四營鄉道口村董家158號C單元新東方有自己的樓嗎?一些在中關村,耗資3億元的新東方總部大樓。北京新東方南樓地址位于北京市海淀區東三街2號,海淀黃莊西側。地處硅谷核心地帶,北臨中關村西、北四環,南臨海淀南路,東西鄰中關村、蘇州街。新東方南樓為A、B兩棟15層寫字樓,地上15層,地下3層,中間由4層裙樓相連。項目總面積19470平方米,規劃總建筑面積8234...

          騰達無線路由器w308rv2怎么設置?設置騰達無線路由器;第一步;打開電腦的瀏覽器,在地址欄輸入192.168.1.1,進入路由器的管理界面。第二步;選擇PPPO騰達路由器怎么橋接小米路由器?布魯特與那臺設備無關。只需打開騰達路由器的無線橋接功能,搜索小米主路由器,輸入密碼,連接即可橋接成功。308是什么意思?308是戀愛分手的意思,分手的數字意思。的數字代表著豐富的含義,比如520,我愛你,52...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>