java构建树形菜单,但是数据重复
时间: 2023-05-22 22:01:23 浏览: 94
您可以使用递归算法来构建树形菜单,首先需要去重,可以使用 HashSet 或者 LinkedHashSet 来去重。然后,您可以将去重后的数据按照父子关系进行排序,再使用递归算法构建树形菜单。以下是示例代码:
```
import java.util.*;
public class TreeMenuBuilder {
public static void main(String[] args) {
List<Menu> menus = new ArrayList<>();
menus.add(new Menu(1, "菜单1", 0));
menus.add(new Menu(2, "菜单2", 0));
menus.add(new Menu(3, "菜单3", 1));
menus.add(new Menu(4, "菜单4", 1));
menus.add(new Menu(5, "菜单5", 2));
menus.add(new Menu(6, "菜单6", 3));
menus.add(new Menu(7, "菜单7", 4));
menus.add(new Menu(8, "菜单8", 5));
menus.add(new Menu(9, "菜单9", 6));
menus.add(new Menu(10, "菜单10", 7));
Set<Menu> set = new LinkedHashSet<>(menus);
List<Menu> sortedMenus = new ArrayList<>(set);
Collections.sort(sortedMenus);
List<Menu> treeMenus = new ArrayList<>();
for (Menu menu : sortedMenus) {
if (menu.getParentId() == 0) {
treeMenus.add(menu);
} else {
for (Menu parentMenu : sortedMenus) {
if (parentMenu.getId() == menu.getParentId()) {
parentMenu.addChild(menu);
break;
}
}
}
}
for (Menu menu : treeMenus) {
System.out.println(menu);
}
}
}
class Menu implements Comparable<Menu> {
private int id;
private String name;
private int parentId;
private List<Menu> children = new ArrayList<>();
public Menu(int id, String name, int parentId) {
this.id = id;
this.name = name;
this.parentId = parentId;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getParentId() {
return parentId;
}
public List<Menu> getChildren() {
return children;
}
public void addChild(Menu menu) {
children.add(menu);
}
@Override
public int compareTo(Menu o) {
return Integer.compare(id, o.id);
}
@Override
public String toString() {
return "Menu{" +
"id=" + id +
", name='" + name + '\'' +
", parentId=" + parentId +
", children=" + children +
'}';
}
}
```
这段代码可以根据 id、name、parentId 来构建树形菜单,其中 id 和 parentId 用于表示父子关系,name 用于表示菜单名称。在构建树形菜单时,首先需要去重,然后按照父子关系进行排序,最后使用递归算法构建树形菜单。
阅读全文