java遞歸設置層級菜單的實現
思路:
先從集合中找出來頂級的菜單,然後遍歷頂級菜單,找出每個頂級菜單的所有子菜單,然後判斷當前需要排列的集合是否為空,如果不為空的話,就在遍歷子菜單的下級菜單,直至沒有需要排列的菜單。
使用迭代器,符合條件之後將數據刪除們可以減少遍歷的次數
package com.eleven; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import lombok.AllArgsConstructor; import lombok.Data; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; /** * @author zhaojinhui * @date 2021/6/4 15:11 * @apiNote */ public class ElevenTest { public static void main(String[] args) { TestChild one = new TestChild("1","1",null); TestChild two = new TestChild("2","2","1"); TestChild sex = new TestChild("3","3","2"); List<TestChild> list = new ArrayList<>(3); Collections.addAll(list,one,two,sex); List<TestChild> tree = getTree(list); System.out.println(tree); } public static List<TestChild> getTree(List<TestChild> testChildList){ List<TestChild> result = new ArrayList<>(); for (TestChild testChild : testChildList) { if(StrUtil.isBlank(testChild.getParentId())){ result.add(testChild); } } testChildList.removeAll(result); for (TestChild testChild : result) { setChildren(testChild,testChildList); } return result; } public static void setChildren(TestChild parent,List<TestChild> list){ List<TestChild> childList = new ArrayList<>(); for(Iterator<TestChild> iterator = list.iterator();iterator.hasNext();){ TestChild next = iterator.next(); if(parent.getCode().equals(next.getParentId())){ childList.add(next); iterator.remove(); } } parent.setChildren(childList); /** 判斷子集集合是否為空比遍歷整個集合是否為空要慢 if(CollUtil.isNotEmpty(childLlist)) { for (TestChild testChild : childList) { setChildren(testChild, list); } } */ if(CollUtil.isNotEmpty(list)) { for (TestChild testChild : childList) { setChildren(testChild, list); } } } } @Data @AllArgsConstructor class TestChild{ private String name; private String code; private String parentId; List<TestChild> children; public TestChild(String name,String code,String parentId){ this.name = name; this.code = code; this.parentId = parentId; } }
到此這篇關於java遞歸設置層級菜單的實現的文章就介紹到這瞭,更多相關java 遞歸設置層級菜單內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Java實現一個簡易版的多級菜單功能
- Java利用遞歸實現樹形結構的工具類
- Java泛型在集合使用與自定義及繼承上的體現和通配符的使用
- java迭代器中刪除元素的實例操作詳解
- JAVA List和Map切割工具詳解