树形结构数据后台处理:一次循环生成树

 一、优化算法下的树结构遍历

// 一、优化算法下的树结构遍历
@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');


 

 

 

转载于:https://my.oschina.net/u/859228/blog/509665

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值