在JavaWeb的相关开发中经常会涉及到多级菜单的展示,为了方便菜单的管理需要使用数据库进行支持,本例采用相关算法讲数据库中的条形记录进行相关组装和排序讲菜单组装成树形结构。
首先是需要的JavaBean
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
public class MenuExt implements Serializable {
private Long id;
private String name;
private String url;
private String icon;
private Long parentId;
private List children = new ArrayList();
private Integer ordby;
private String state;
//省略Getter和Setter
public void sortChildren() {
Collections.sort(children, new Comparator() {
@Override
public int compare(MenuExt menu1, MenuExt menu2) {
int result = 0;
Integer ordby1 = menu1.getOrdby();
Integer ordby2 = menu2.getOrdby();
Long id1 = menu1.getId();
Long id2 = menu2.getId();
if (null != ordby1 && null != ordby2) {
result = (ordby1 < ordby2 ? -1 : (ordby1 == ordby2 ? 0 : 1));
} else {
result = (id1 < id2 ? -1 : (id1 == id2 ? 0 : 1));
}
return result;
}
});
// 对每个节点的下一层节点进行排序
for (Iterator it = children.iterator(); it.hasNext();) {
it.next().sortChildren();
}
}
public List getChildren() {
return children;
}
public void setChildren(List children) {
this.children = children;
}
}
Java算法
public static ListcreateTreeMenus(List menus) { List treeMenus = null; if (null != menus && !menus.isEmpty()) { // 创建根节点 MenuExt root = new MenuExt(); root.setName("菜单根目录"); // 组装Map数据 Map dataMap = new HashMap (); for (MenuExt menu : menus) { dataMap.put(menu.getId(), menu); } // 组装树形结构 Set > entrySet = dataMap.entrySet(); for (Entry entry : entrySet) { MenuExt menu = entry.getValue(); if (null == menu.getParentId() || 0 == menu.getParentId()) { root.getChildren().add(menu); } else { dataMap.get(menu.getParentId()).getChildren().add(menu); } } // 对树形结构进行二叉树排序 root.sortChildren(); treeMenus = root.getChildren(); } return treeMenus; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。



