电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Java Tree結構數據中查找匹配節點方式

瀏覽:4日期:2022-08-25 09:47:15

我就廢話不多說了,大家還是直接看代碼吧~

private boolean contains(List<TreeVo> children, String value) { for (TreeVo child : children) { if (child.getName().equals(value) || (child.getChildren().size() > 0 && contains(child.getChildren(), value))) { return true; } } return false; }

補充知識:java樹形結構根據父級節點獲取其下面的所有最底層的根節點數據

因工作中需要根據任意父級節點查找到樹形節點下的根節點信息,所以寫了下面一個demo方便自己需要時的查看以及需要的人參考

一共兩個類

TreeNode 使用了lombok插件

TreeNodeTest

主要的邏輯都在TreeNodeTest中 如果有錯誤的地方,還望留言評論,感謝

TreeNode

@Data@AllArgsConstructorpublic class TreeNode { /** * 節點ID **/ private String id; /** * 父級ID **/ private String parentId; /** * 節點名稱 **/ private String name;}

TreeNodeTest

/** * 測試類 * 此方法建議數據量少的情況使用 或者 此數據很少變動并且加入到緩存中*/public class TreeNodeTest { public static void main(String[] args) { /** *0 * / * 123 130 * / / * 124 125 131 132 * / / / / * 126 127 128 129 133 134 135 136 * 只支持 節點路徑長度必須一致的情況下才可以 * 此Demo可以實現 根據0 獲取到[126 127 128 129 133 134 135 136] * 根據123 獲取到[126 127 128 129] * 注:比如 126 127節點沒有 此時獲取到的0根節點 就會出現 [124 128 129 133 134 135 136] */ TreeNode treeNode = new TreeNode('123','0','北京'); TreeNode treeNode1 = new TreeNode('124','123','豐臺區'); TreeNode treeNode2 = new TreeNode('125','123','海淀區'); TreeNode treeNode3 = new TreeNode('126','124','豐臺區豐臺科技園'); TreeNode treeNode4 = new TreeNode('127','124','豐臺區豐臺南路'); TreeNode treeNode5 = new TreeNode('128','125','海淀區中關村'); TreeNode treeNode6 = new TreeNode('129','125','海淀區海淀公園'); TreeNode treeNode7 = new TreeNode('130','0','上海'); TreeNode treeNode8 = new TreeNode('131','130','徐匯區'); TreeNode treeNode9 = new TreeNode('132','130','虹口區'); TreeNode treeNode10 = new TreeNode('133','131','徐匯區龍華寺'); TreeNode treeNode11 = new TreeNode('134','131','徐匯區天主教堂'); TreeNode treeNode12 = new TreeNode('135','132','虹口區虹口足球場'); TreeNode treeNode13 = new TreeNode('136','132','虹口區魯迅公園'); List<TreeNode> treeNodes = new LinkedList<>(); treeNodes.add(treeNode); treeNodes.add(treeNode1); treeNodes.add(treeNode2); treeNodes.add(treeNode3); treeNodes.add(treeNode4); treeNodes.add(treeNode5); treeNodes.add(treeNode6); treeNodes.add(treeNode7); treeNodes.add(treeNode8); treeNodes.add(treeNode9); treeNodes.add(treeNode10); treeNodes.add(treeNode11); treeNodes.add(treeNode12); treeNodes.add(treeNode13); // 按照父級ID分組 Map<String,List<TreeNode>> groupByParentIdMap = treeNodes.stream() .collect(Collectors.groupingBy(TreeNode::getParentId)); // 存放 0:對應的所有根節點ID數據 Set<String> topToLowerChildIdSet = new HashSet<>(); // 取出頂級數據(也就是父級ID為0的數據 當然頂層的父級ID也可以自定義 這里只是演示 所以給了0) List<TreeNode> topTreeNodes = groupByParentIdMap.get('0'); for(TreeNode node : topTreeNodes){ getMinimumChildIdArray(groupByParentIdMap,node.getId(),topToLowerChildIdSet); } System.out.println('0節點下所有的根節點數據集合:' + topToLowerChildIdSet.toString()); } /** * 根據父級節點獲取最低層次 那一級的節點數據 * 1 * / * 2 3 * / / * 4 5 6 7 * 上面的樹形結構調用此方法 根據1 可以獲取到 [4 5 6 7] * 根據3 可以獲得到 [6 7] * @param groupByParentIdMap 所有的元素集合(根據父級ID進行了分組) 分組方法可以使用lambda 如下: * Map<String, List<Person>> peopleByCity = personStream.collect(Collectors.groupingBy(Person::getCity)); * @param pid 父級ID * @param topToLowerChildIdSet 存儲最深根節點的數據集合 */ public static Set<String> getMinimumChildIdArray(Map<String,List<TreeNode>> groupByParentIdMap, String pid, Set<String> topToLowerChildIdSet){ // 存放當前pid對應的所有根節點ID數據 Set<String> currentPidLowerChildIdSet = new HashSet<>(); // 獲取當前pid下所有的子節點 List<TreeNode> childTreeNodes = groupByParentIdMap.get(pid); if(CollUtil.isEmpty(childTreeNodes)){ return null; } for(TreeNode treeNode : childTreeNodes){ Set<String> lowerChildIdSet = getMinimumChildIdArray(groupByParentIdMap,treeNode.getId(),currentPidLowerChildIdSet); if(CollUtil.isEmpty(lowerChildIdSet)){ // 如果返回null 表示當前遍歷的treeNode節點為最底層的節點 currentPidLowerChildIdSet.add(treeNode.getId()); } } System.out.println('當前父級ID:'+ pid + '下所有的根節點數據:' + currentPidLowerChildIdSet.toString()); // 把當前獲取到的根節點數據 一并保存到上一個節點父級ID集合中 topToLowerChildIdSet.addAll(currentPidLowerChildIdSet); return currentPidLowerChildIdSet; }}

運行后的結果:

Java Tree結構數據中查找匹配節點方式

以上這篇Java Tree結構數據中查找匹配節點方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库-首页-东莞市傲马网络科技有限公司 | HDPE土工膜,复合土工膜,防渗膜价格,土工膜厂家-山东新路通工程材料有限公司 | 【甲方装饰】合肥工装公司-合肥装修设计公司,专业从事安徽办公室、店面、售楼部、餐饮店、厂房装修设计服务 | 沥青灌缝机_路面灌缝机_道路灌缝机_沥青灌缝机厂家_济宁萨奥机械有限公司 | 智慧钢琴-电钢琴-便携钢琴-数码钢琴-深圳市特伦斯乐器有限公司 | 至顶网| 天津拓展_天津团建_天津趣味运动会_天津活动策划公司-天津华天拓展培训中心 | 广州企亚 - 数码直喷、白墨印花、源头厂家、透气无手感方案服务商! | 东莞市踏板石餐饮管理有限公司_正宗桂林米粉_正宗桂林米粉加盟_桂林米粉加盟费-东莞市棒子桂林米粉 | 常州律师事务所_常州律所_常州律师-江苏乐天律师事务所 | 铝板冲孔网,不锈钢冲孔网,圆孔冲孔网板,鳄鱼嘴-鱼眼防滑板,盾构走道板-江拓数控冲孔网厂-河北江拓丝网有限公司 | 北京浩云律师事务所-法律顾问_企业法务_律师顾问_公司顾问 | 钢骨架轻型板_膨石轻型板_钢骨架轻型板价格_恒道新材料 | 武汉EPS线条_EPS装饰线条_EPS构件_湖北博欧EPS线条厂家 | 闭端端子|弹簧螺式接线头|防水接线头|插线式接线头|端子台|电源线扣+护线套|印刷电路板型端子台|金笔电子代理商-上海拓胜电气有限公司 | 东莞工作服_东莞工作服定制_工衣订做_东莞厂服 | 中高频感应加热设备|高频淬火设备|超音频感应加热电源|不锈钢管光亮退火机|真空管烤消设备 - 郑州蓝硕工业炉设备有限公司 | 灌木树苗-绿化苗木-常绿乔木-价格/批发/基地 - 四川成都途美园林 | 隆众资讯-首页_大宗商品资讯_价格走势_市场行情 | PU树脂_水性聚氨酯树脂_聚氨酯固化剂_聚氨酯树脂厂家_宝景化工 | 老房子翻新装修,旧房墙面翻新,房屋防水补漏,厨房卫生间改造,室内装潢装修公司 - 一修房屋快修官网 | 超声波焊接机,振动摩擦焊接机,激光塑料焊接机,超声波焊接模具工装-德召尼克(常州)焊接科技有限公司 | 直流电能表-充电桩电能表-导轨式电能表-智能电能表-浙江科为电气有限公司 | 深圳市东信高科自动化设备有限公司 | 合肥升降机-合肥升降货梯-安徽升降平台「厂家直销」-安徽鼎升自动化科技有限公司 | 南汇8424西瓜_南汇玉菇甜瓜-南汇水蜜桃价格 | 【官网】博莱特空压机,永磁变频空压机,螺杆空压机-欧能优 | 冷轧机|两肋冷轧机|扁钢冷轧机|倒立式拉丝机|钢筋拔丝机|收线机-巩义市华瑞重工机械制造有限公司 | 首页-恒温恒湿试验箱_恒温恒湿箱_高低温试验箱_高低温交变湿热试验箱_苏州正合 | 纯化水设备-纯水设备-超纯水设备-[大鹏水处理]纯水设备一站式服务商-东莞市大鹏水处理科技有限公司 | 建筑资质代办-建筑企业资质代办机构-建筑资质代办公司 | 不锈钢列管式冷凝器,换热器厂家-无锡飞尔诺环境工程有限公司 | 皮带机-带式输送机价格-固定式胶带机生产厂家-河南坤威机械 | 工业铝型材-铝合金电机壳-铝排-气动执行器-山东永恒能源集团有限公司 | 精密冲床,高速冲床等冲压设备生产商-常州晋志德压力机厂 | 细沙回收机-尾矿干排脱水筛设备-泥石分离机-建筑垃圾分拣机厂家-青州冠诚重工机械有限公司 | 断桥铝破碎机_铝合金破碎机_废铁金属破碎机-河南鑫世昌机械制造有限公司 | 深圳宣传片制作_产品视频制作_深圳3D动画制作公司_深圳短视频拍摄-深圳市西典映画传媒有限公司 | 茶楼装修设计_茶馆室内设计效果图_云臻轩茶楼装饰公司 | 沈阳缠绕膜价格_沈阳拉伸膜厂家_沈阳缠绕膜厂家直销 | 华夏医界网_民营医疗产业信息平台_民营医院营销管理培训 |