日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Java Tree結(jié)構(gòu)數(shù)據(jù)中查找匹配節(jié)點(diǎn)方式

瀏覽:30日期: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; }

補(bǔ)充知識:java樹形結(jié)構(gòu)根據(jù)父級節(jié)點(diǎn)獲取其下面的所有最底層的根節(jié)點(diǎn)數(shù)據(jù)

因工作中需要根據(jù)任意父級節(jié)點(diǎn)查找到樹形節(jié)點(diǎn)下的根節(jié)點(diǎn)信息,所以寫了下面一個(gè)demo方便自己需要時(shí)的查看以及需要的人參考

一共兩個(gè)類

TreeNode 使用了lombok插件

TreeNodeTest

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

TreeNode

@Data@AllArgsConstructorpublic class TreeNode { /** * 節(jié)點(diǎn)ID **/ private String id; /** * 父級ID **/ private String parentId; /** * 節(jié)點(diǎn)名稱 **/ private String name;}

TreeNodeTest

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

運(yùn)行后的結(jié)果:

Java Tree結(jié)構(gòu)數(shù)據(jù)中查找匹配節(jié)點(diǎn)方式

以上這篇Java Tree結(jié)構(gòu)數(shù)據(jù)中查找匹配節(jié)點(diǎn)方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品地址| 国产麻豆精品| 日韩欧美一区免费| 国产精品蜜芽在线观看| 亚洲欧洲美洲av| 性感美女一区二区在线观看| 日韩欧美精品综合| 日韩久久一区二区三区| 亚洲91视频| 欧美.日韩.国产.一区.二区| 999久久久91| 亚洲激情中文| 蜜桃久久久久久| 日韩在线观看中文字幕| 久久国产婷婷国产香蕉| 日韩av资源网| 欧美黄色精品| 日韩精品第一区| 影音先锋国产精品| 亚洲一级淫片| 欧美黄色一区| 日韩欧美一区二区三区在线视频| 亚洲天堂久久| 视频一区视频二区在线观看| 日韩综合小视频| 麻豆精品99| 日韩中文在线播放| 蜜桃91丨九色丨蝌蚪91桃色| 国产精品一级| 久久久国产亚洲精品| 亚洲午夜在线| 91精品国产自产在线丝袜啪| 国产成人精品一区二区免费看京| 亚洲a一区二区三区| 日韩影院精彩在线| 你懂的国产精品永久在线| 欧美激情国产在线| 香蕉久久夜色精品国产| 国产精品一站二站| 亚洲91视频| 日本不卡视频一二三区| 四虎成人av| 免费在线观看视频一区| 国产精品亚洲综合在线观看| 亚洲伦乱视频| 热久久免费视频| 麻豆国产精品一区二区三区 | 夜夜嗨一区二区| 国产免费久久| 五月天久久久| 国产激情综合| 日韩亚洲在线| 久久亚洲精品中文字幕| 欧美日韩精品一本二本三本| 青草国产精品久久久久久| 欧美片第1页| 欧美一区=区三区| 久久在线免费| 欧美日韩 国产精品| 日韩国产在线| 欧美久久亚洲| 国产婷婷精品| 欧美激情国产在线| 亚洲v天堂v手机在线| 97精品一区二区| 亚洲乱码视频| 99精品视频精品精品视频| 欧美欧美黄在线二区| 婷婷综合亚洲| 色爱综合网欧美| 91精品国产经典在线观看| japanese国产精品| 日韩a一区二区| 欧美日本久久| 欧美特黄视频| 日韩欧美精品一区| 国产日本亚洲| 免费成人在线影院| 久久精品99久久无色码中文字幕| 国产精品videossex| 男女男精品网站| 激情五月综合| 麻豆国产在线| 欧美成a人片免费观看久久五月天| 久久最新视频| 亚州av乱码久久精品蜜桃| 精品久久91| 日本午夜精品| 在线精品一区二区| 久久在线免费| 亚洲一级少妇| 久久精品国产亚洲一区二区三区| 日韩二区三区四区| 视频一区视频二区中文| japanese国产精品| 日本精品影院| 日韩国产激情| 国产精品蜜芽在线观看| 精品中国亚洲| 国产精品久久久久久久免费软件| 日韩二区在线观看| 最新亚洲国产| 石原莉奈在线亚洲三区| 激情综合网站| 蜜桃视频在线网站| 黄色在线网站噜噜噜| 精品午夜久久| 久久亚洲精品中文字幕| 久久av网站| 国产精品玖玖玖在线资源| 日本特黄久久久高潮| 亚洲综合激情在线| 蜜桃视频免费观看一区| 免费精品视频| 快she精品国产999| 视频一区欧美精品| 视频一区欧美日韩| 蜜桃一区二区三区在线观看| 男人的天堂亚洲一区| 免费观看久久av| 欧美va亚洲va日韩∨a综合色| 久久蜜桃精品| 国精品一区二区| 日韩视频精品在线观看| 9国产精品视频| 亚洲视频二区| 日韩激情精品| 国产精品一卡| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 成人亚洲精品| 精品欠久久久中文字幕加勒比| 国产一区二区三区黄网站| 久久精品一区| 国产精品黑丝在线播放| 亚洲精品在线影院| 欧美成人午夜| 奶水喷射视频一区| 1024精品久久久久久久久| 日韩三区四区| 国产福利91精品一区二区| 国模大尺度视频一区二区| 91久久中文| 欧美日韩一二| 日本91福利区| 久久精品卡一| 国产精品porn| 91精品二区| 亚洲人成亚洲精品| 国产一区二区三区亚洲综合| 免费久久精品视频| 精品国产a一区二区三区v免费| 爽好久久久欧美精品| 99热精品久久| 国产精品久久| 一区二区电影| 国内精品福利| 国产一区调教| 夜夜嗨一区二区三区| 亚洲va中文在线播放免费| 国产精品一区二区免费福利视频 | 国产中文字幕一区二区三区| 精品久久91| 国产精品视频一区二区三区综合| 亚洲一区成人| 中文一区在线| 亚洲欧美激情诱惑| 亚洲免费一区三区| 毛片不卡一区二区| 日韩不卡在线观看日韩不卡视频| 亚洲一级高清| 午夜电影亚洲| 亚洲深夜影院| 亚欧洲精品视频在线观看| 亚洲人成高清| 国产一区2区| 三上悠亚国产精品一区二区三区 | 亚洲福利一区| 午夜精品成人av| 久久婷婷一区| 久久香蕉精品| 亚洲欧洲日本mm| 综合一区二区三区| 亚洲+小说+欧美+激情+另类| 日韩精品电影| 亚洲日本在线观看视频| 欧美日韩在线播放视频| 日本在线不卡视频| 国产一区福利| 亚洲在线电影| 成人污污视频| 日韩欧美中文在线观看| 伊人久久视频| 亚洲97av| 欧美亚洲精品在线| 国产精品videosex极品| 99久久九九| 国产精品一区二区精品| av成人国产| 欧美国产美女| 日韩不卡一区二区三区|