一、优化算法下的树结构遍历
// 一、优化算法下的树结构遍历
@SuppressWarnings("unchecked")
public String gainTreeFolder() {
// 1 设置虚拟根节点
root = new Folders();
root.setFolderId(MyConstants.ID);
root.setFolderName("顶部");
// 2查询该节点下的树形结构的数据.
List<Folders> fileList = filesService.queryList("Folders", "queryAll", root);
Map map = new TreeMap<String, Folders>();
Folders tempTree;
// 3 将list中元素放入map.其中主键为key.
Folders subRoot = null;
for (int i = 0; fileList != null && i < fileList.size(); i++) {
tempTree = fileList.get(i);
map.put(tempTree.getId(), tempTree);
if (MyConstants.ID.equals(tempTree.getParentId())) {
subRoot = tempTree;
root.getChildren().add(subRoot);
}
}
// 4 循环。将循环中的节点,添加到上一级节点中。
for (int i = 0; fileList != null && i < fileList.size(); i++) {
tempTree = fileList.get(i);
Folders t = (Folders) map.get(tempTree.getParentId());
if (t != null) {
t.getChildren().add(tempTree);
map.put(tempTree.getParentId(), t);
}
}
// 5返回root.
return SUCCESS;
}
二、原有算法
// 加载文件夹结构图
@SuppressWarnings("unchecked")
public String loadFoldersMap() {
logger.info("开始文件夹结构图");
// 1 设置根节点
root = new Folders();
root.setFolderId(MyConstants.ID);
root.setParentId(MyConstants.PARENTID);
root.setFolderName("顶部");
root.setOwnerType((short) 9);
// 2查询该节点下的树形结构的数据.
List<Folders> fileList = filesService.queryList("Folders", "queryAll", root);
// 3 循环将下级节点数据添加进来
ConcurrentLinkedQueue<Folders> newList = new ConcurrentLinkedQueue<Folders>();
newList.addAll(fileList);
getList(root, newList);
return SUCCESS;
}
public void getList(Folders files, ConcurrentLinkedQueue<Folders> fileLists) {
List<Folders> sublist = new ArrayList<Folders>();
if (!MyUtils.isEmpty(fileLists)) {
for (Iterator<Folders> iterator = fileLists.iterator(); iterator.hasNext();) {
Folders temp = (Folders) iterator.next();
if (MyUtils.equals(temp.getParentId(), files.getFolderId())) {
sublist.add(temp);
iterator.remove();
getList(temp, fileLists);
}
}
}
files.setChildren(sublist);
}
---------------------------------以上来自徐亮Bright的博客 ---------------------------------
public List<PageSysMenu> ss(List<PageSysMenu> fileList) {
List<PageSysMenu> l = new ArrayList<PageSysMenu>();
for (Iterator<PageSysMenu> iterator = fileList.iterator(); iterator.hasNext();) {
PageSysMenu psm = iterator.next();
if (StringUtils.isBlank(psm.getParentId())) {
l.add(psm);
iterator.remove();
}
}
for (PageSysMenu psm : l) {
Map<String, PageSysMenu> map = new TreeMap<String, PageSysMenu>();
PageSysMenu _psm;
// 3 将list中元素放入map.其中主键为key.
for (Iterator<PageSysMenu> iterator = fileList.iterator(); iterator.hasNext();) {
_psm = iterator.next();
map.put(_psm.getId(), _psm);
if (psm.getId().equals(_psm.getParentId())) {
psm.getChildren().add(_psm);
iterator.remove();
}
}
// 4 循环。将循环中的节点,添加到上一级节点中。
for (Iterator<PageSysMenu> iterator = fileList.iterator(); iterator.hasNext();) {
_psm = iterator.next();
PageSysMenu t = map.get(_psm.getParentId());
if (t != null) {
t.getChildren().add(_psm);
map.put(_psm.getParentId(), t);
iterator.remove();
}
}
}
System.out.println(JSON.toJSONString(l));
return l;
}
SQL
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `sys_menu`
-- ----------------------------
DROP TABLE IF EXISTS `sys_menu`;
CREATE TABLE `sys_menu` (
`id` varchar(32) NOT NULL COMMENT 'id',
`pid` varchar(32) DEFAULT NULL COMMENT 'pid',
`name` varchar(50) NOT NULL COMMENT 'name',
`type` varchar(50) DEFAULT NULL COMMENT 'type',
`icon` varchar(50) DEFAULT NULL COMMENT 'icon',
`link` varchar(200) DEFAULT NULL COMMENT 'link',
`path` varchar(50) DEFAULT NULL COMMENT 'path',
`tag` varchar(50) DEFAULT NULL COMMENT 'tag',
`module` varchar(50) DEFAULT NULL COMMENT 'module',
`order_num` int(11) DEFAULT NULL COMMENT 'order_num',
`isEnabled` char(1) DEFAULT NULL COMMENT 'isEnabled',
`create_by` varchar(32) NOT NULL COMMENT 'create_by',
`create_date` datetime NOT NULL COMMENT 'create_date',
`update_by` varchar(32) NOT NULL COMMENT 'update_by',
`update_date` datetime NOT NULL COMMENT 'update_date',
`remarks` varchar(200) DEFAULT NULL COMMENT 'remark',
`del_flag` char(1) NOT NULL COMMENT 'del_flag',
PRIMARY KEY (`id`),
KEY `FK_FK_sysMenu_sysMenu` (`pid`),
CONSTRAINT `FK_FK_sysMenu_sysMenu` FOREIGN KEY (`pid`) REFERENCES `sys_menu` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='sys_menu';
-- ----------------------------
-- Records of sys_menu
-- ----------------------------
INSERT INTO `sys_menu` VALUES ('menu001', null, 'menu1', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0');
INSERT INTO `sys_menu` VALUES ('menu002', 'menu001', 'menu1-1', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0');
INSERT INTO `sys_menu` VALUES ('menu003', 'menu002', 'menu1-1-1', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0');
INSERT INTO `sys_menu` VALUES ('menu004', 'menu003', 'menu1-1-1-1', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0');
INSERT INTO `sys_menu` VALUES ('menu005', 'menu005', 'menu1-1-1-1-1', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0');
INSERT INTO `sys_menu` VALUES ('menu006', 'menu002', 'menu1-1-2', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0');
INSERT INTO `sys_menu` VALUES ('menu007', 'menu001', 'menu1-2', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0');
INSERT INTO `sys_menu` VALUES ('menu008', null, 'menu2', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0');
INSERT INTO `sys_menu` VALUES ('menu009', 'menu008', 'menu2-1', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0');
INSERT INTO `sys_menu` VALUES ('menu010', 'menu009', 'menu2-1-1', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0');
INSERT INTO `sys_menu` VALUES ('menu011', 'menu009', 'menu2-1-2', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0');
INSERT INTO `sys_menu` VALUES ('menu012', 'menu008', 'menu2-2', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0');
INSERT INTO `sys_menu` VALUES ('menu013', 'menu008', 'menu2-3', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0');
INSERT INTO `sys_menu` VALUES ('menu014', null, 'menu3', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0');
INSERT INTO `sys_menu` VALUES ('menu015', 'menu014', 'menu3-1', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0');
INSERT INTO `sys_menu` VALUES ('menu016', 'menu014', 'menu3-2', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0');
INSERT INTO `sys_menu` VALUES ('menu017', 'menu014', 'menu3-3', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0');