一步一步實現一個Java樹形結構體方法

廢話不多說 ,實現一個樹型結構體首先得需要一個對象來裝載需要的結構數據;

   // id
	private Integer id;
	// 節點名稱
	private String name;
	// 選中狀態
	private boolean checked;
	// 子節點
	private List<TreeNode> children;
	// 是否可選 true:不可選  // 廢棄
	private boolean disabled;
	// logo
	private String icon;

	// 節點是否展開
	private boolean open;
	
	//父id
	private Integer pId;

再把我映射數據庫對象得菜單結構體粘貼出來


 @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "menu_id", unique = true, nullable = false)
    private Integer menuId;

    @Column(name = "pid", length = 11)
    private Integer pid;

    @Column(name = "menu_name", length = 30)
    private String menuName;

    @Column(name = "menu_url", length = 50)
    private String menuUrl;

    @Column(name = "menu_type", length = 1)
    private Integer menuType;

    @Column(name = "admin_id", length = 11)
    private Integer adminId;

    @Column(name = "icon", length = 100)
    private String icon;

    @Column(name = "tips", length = 100)
    private String tips;

    @Column(name = "order_show", length = 8)
    private Integer order;

實現方法

     //把當前數據重新規整爲符合樹型結構的數據結構 
     //menuAllList  是數據庫查出來得菜單
        List<TreeNode> resultSet = null;
        if (menuAllList != null && menuAllList.size() > 0) {
            resultSet = new ArrayList<TreeNode>();
            TreeNode node = null;
            for (Menu obj : menuAllList) {
                node = new TreeNode();
                if (obj.getPid() == 0){
                    //夫級別
                    node.setIcon("../../../static/img/parent_menu.png");
                }
                if (obj.getPid() == 0 || !(obj.getPid() > 0)) {
                    node.setId(obj.getMenuId());
                    node.setName(obj.getMenuName());
                    node.setChildren(getChildNode(menuAllList, obj.getMenuId(), _list));
                    node.setChecked(false);
                    node.setpId(obj.getPid());
                    //根據自己業務去填充默認值
                    
                    node.setDisabled(false);
                    resultSet.add(node);
                }
            }
        }

    /**
     * 獲取所有權限列表-查詢子節點
     */
    private List<TreeNode> getChildNode(List<Menu> list, Integer parentId, List<Integer> _list) {
        List<TreeNode> tem = new ArrayList<TreeNode>();
        TreeNode node = null;
        for (Menu obj : list) {
            if (obj.getPid() != 0 && obj.getPid() > 0) {
                if (obj.getPid() == parentId) {
                    node = new TreeNode();
                    node.setId(obj.getMenuId());
                    node.setName(obj.getMenuName());
                    node.setChildren(getChildNode(list, obj.getMenuId(), _list));
                    node.setChecked(false);
                    node.setIcon("../../../static/img/child_menu.png");
                    if (_list != null && _list.size() > 0) {
                        if (_list.contains(obj.getMenuId())) {
                            node.setChecked(true);
                            node.setOpen(true);
                        }
                    }
                    node.setDisabled(false);
                    tem.add(node);
                }
            }

        }
        if (tem.size() > 0) {
            return tem;
        }
        return null;
    }

這個代碼片段是前端實現得

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章