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を参照してください。