#Java再帰関数はメニューツリーアセンブリを使用します

Java再帰メニューツリーアセンブリ


Menuエンティティクラス
public class Menu {
    
    

    private String menuid;
    private String parentid;
    private String name;
	// getset方法省略
}
TreeItemエンティティクラス
public class TreeItem {
    
    

    private String id;
    private String text;
    // treeitem的Children
    private List<TreeItem> childern;
	// getset方法省略	
}
メニューツリーを取得する
public class MenuTreeTest {
    
    
    static List<Menu> list=new ArrayList<>();
    static {
    
    

        Menu menu=new Menu();
        menu.setMenuid("0001");
        menu.setName("根节点");
        menu.setParentid("0000");

        Menu menu1=new Menu();
        menu1.setMenuid("0002");
        menu1.setName("节点1");
        menu1.setParentid("0001");

        Menu menu2=new Menu();
        menu2.setMenuid("0003");
        menu2.setName("节点2");
        menu2.setParentid("0001");

        Menu menu3=new Menu();
        menu3.setMenuid("0004");
        menu3.setName("节点3");
        menu3.setParentid("0002");

        Menu menu4=new Menu();
        menu4.setMenuid("0005");
        menu4.setName("节点4");
        menu4.setParentid("0003");

        Menu menu5=new Menu();
        menu5.setMenuid("0006");
        menu5.setName("节点5");
        menu5.setParentid("0005");
        list.add(menu);
        list.add(menu1);
        list.add(menu2);
        list.add(menu3);
        list.add(menu4);
        list.add(menu5);
    }


    public static void main(String[] args) {
    
    
        list.stream().forEach(System.out::println);
        System.out.println("=============================");
        // 得到第一个节点,并且删除
        Iterator iterator=list.iterator();

        List<TreeItem> treeItems=new ArrayList<>();
        TreeItem treeItem=new TreeItem();
        String rootNode="";
        while (iterator.hasNext()){
    
    
            Menu next = (Menu) iterator.next();
            if("0001".equals(next.getMenuid())){
    
    
                treeItem.setId(next.getMenuid());
                treeItem.setText(next.getName());
                rootNode=treeItem.getId();
                iterator.remove();
            }
        }
        if(CollectionUtils.isEmpty(list)){
    
    
            treeItems.add(treeItem);
        }

        // 处理childern
        else{
    
    
            List<TreeItem> trees=getChildren(rootNode,list);
            treeItem.setChildern(trees);
            treeItems.add(treeItem);
        }

        String x="a";
        Object o = JSONObject.toJSON(treeItems);
        System.out.println(o);


    }

    private static List<TreeItem> getChildren(String rootNode, List<Menu> list) {
    
    
        List<TreeItem> treeItems=new ArrayList<>();
        for (Menu menu : list) {
    
    
            String parentid = menu.getParentid();
            String menuid=menu.getMenuid();
            TreeItem treeItem=new TreeItem();
            if(rootNode.equals(parentid)){
    
    
                treeItem.setId(menu.getMenuid());
                treeItem.setText(menu.getName());
                // 递归得到所有的Children节点
                List<TreeItem> children = getChildren(menuid, list);
                treeItem.setChildern(children);
                treeItems.add(treeItem);
            }

        }
        return treeItems;
    }

}
メニューリストは以下の通りです

ここに写真の説明を挿入

ツリーを以下に示します

ここに写真の説明を挿入
完全なコードについては、コードクラウドアドレスhttps://gitee.com/Marlon_Brando/JavaTest/tree/master/src/main/java/list/diguiを参照してください。

おすすめ

転載: blog.csdn.net/qq_37248504/article/details/108157388