文档章节

构造iview Tree结构

海蛎子大呲花
 海蛎子大呲花
发布于 2017/04/14 16:42
字数 570
阅读 1180
收藏 0

工程目录和类结构:

1.Book.java  测试model,包含id和父id还有name。

package com.dlmu.sei;

/**
 *
 * @author zhangtuo
 * @Date 2017/4/14
 */
public class Book {
    private String id;
    private String parentId;
    private String name;

    public String getId() {
        return id;
    }
    //省略get和set函数,构造函数等。
}

2.Constant.java  常量定义,父节点的uuid默认都是0字符串

package com.dlmu.sei;

/**
 * @author zhangtuo
 * @Date 2017/4/14
 */
public class Constant {
    public static final String UUID_PARENT = "00000000000000000000000000000000";
}

3.TreeNode.java  树结构model。

package com.dlmu.sei;

import java.util.List;

/**
 * iview的tree格式
 * @author zhangtuo
 * @Date 2017/4/14
 */
public class TreeNode {
    private String title;
    private boolean extend;//是否扩展
    private List<TreeNode> childrens;

    public String getTitle() {
        return title;
    }

    //省略get和set函数以及toString函数。
}

4.TreeUtil.java 生成树的类,以递归的方式构造。

package com.dlmu.sei;

import java.util.ArrayList;
import java.util.List;

/**
 * 生成树的结构
 * @author zhangtuo
 * @Date 2017/4/14
 */
public class TreeUtil {

    /**
     * 生出树结构。
     * @return
     */
    public TreeNode buildTree(List<Book> books) {
        //最后返回的treeNode
        TreeNode treeNode = new TreeNode();
        //遍历books
        for (Book book : books) {
            //拿到该book的父id
            String pid = book.getParentId();
            //如果pid是超级根节点,可以开始构造。
            if (pid.contains(Constant.UUID_PARENT)) {
                treeNode.setExtend(true);
                treeNode.setTitle(book.getName());
                build(book, books, treeNode);
            }
        }
        return treeNode;
    }

    private void build(Book book, List<Book> books, TreeNode treeNode) {
        List<Book> childrens = getChildrens(book, books);
        List<TreeNode> childrenNodes = new ArrayList<TreeNode>();
        //如果该book有叶子,则递归遍历叶子
        if (!childrens.isEmpty()) {
            for (Book child : childrens) {
                String childId = child.getId();
                TreeNode childNode = new TreeNode();
                childNode.setExtend(true);
                childNode.setTitle(child.getName());
                childrenNodes.add(childNode);
                build(child, books, childNode);
                if (childrenNodes.size() != 0) {
                    treeNode.setChildrens(childrenNodes);
                }
            }
        } else {
            //如果没有孩子,是不能扩展,extend为false
            treeNode.setExtend(false);
        }
    }

    /**
     * 查找某个节点下的叶子节点
     * @param book
     * @param books
     * @return
     */
    private List<Book> getChildrens(Book book, List<Book> books) {
        List<Book> childrens = new ArrayList<Book>();
        String id = book.getId();
        for (Book child : books) {
            //如果遍历中的parentId和book的id相同,则是它的子节点
            if (child.getParentId().equals(id)) {
                childrens.add(child);
            }
        }
        return childrens;
    }
}

5. TreeNodeTest.java 测试函数。

package com.dlmu.sei;

import com.alibaba.fastjson.JSONObject;
import net.sf.json.JSONArray;
import org.junit.Test;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

/**
 * @author zhangtuo
 * @Date 2017/4/14
 */

public class TreeNodeTest {

    private static String uuid() {
        return UUID.randomUUID().toString().replace("-", "");
    }

    @Test
    public void test() {
        List<Book> books = generateTestData();
        TreeUtil treeUtil = new TreeUtil();
        TreeNode treeNode = treeUtil.buildTree(books);
        System.out.println(JSONArray.fromObject(treeNode));
    }

    private List<Book> generateTestData() {
        Book b0 = new Book(uuid(), Constant.UUID_PARENT, "book0");

        Book b1 = new Book(uuid(), b0.getId(), "book1");
        Book b2 = new Book(uuid(), b0.getId(), "book2");
        Book b3 = new Book(uuid(), b0.getId(), "book3");

        Book b11 = new Book(uuid(), b1.getId(), "book1-1");
        Book b12 = new Book(uuid(), b1.getId(), "book1-2");

        Book b111 = new Book(uuid(), b11.getId(), "book1-1-1");

        Book b21 = new Book(uuid(), b2.getId(), "book2-1");

        Book b31 = new Book(uuid(), b3.getId(), "book3-1");

        List<Book> books = new ArrayList<Book>();

        books.add(b0);
        books.add(b1);
        books.add(b2);
        books.add(b3);
        books.add(b11);
        books.add(b12);
        books.add(b111);
        books.add(b21);
        books.add(b31);
        return books;
    }
}

 

© 著作权归作者所有

海蛎子大呲花
粉丝 4
博文 50
码字总数 16102
作品 0
杭州
程序员
私信 提问
iView 3.1.0 版本:支持 TypeScript,支持 Vue CLI 3

自 iView 7.28 发布 3.0 后,今天我们又带来了一个重要的版本 3.1.0(版本代号:INSIDE),这个版本 iView 开始支持 TypeScript,可以算是一个新的里程碑。 如果觉得不错,请不要吝啬你的 St...

aresn
2018/09/04
4K
8
iView v3.1.4 发布,基于 Vue.js 的高质量 UI 组件库

iView v3.1.4 发布了,iView 是一套基于 Vue.js 的高质量 UI 组件库,主要服务于 PC 界面的中后台产品。 更新内容: Tree 新增选中及半选节点的方法 。 #4664 修复 Time 组件有时计算时间不准...

达尔文
2018/11/01
2K
5
iView 发布 3.0 版本,以及开发者社区等 5 款新产品

iView 发布 3.0 版本,以及开发者社区等 5 款新产品 7 月 28 日,我们成功地召开了 iView 3.0 暨神秘新品发布会,这可能是前端开源圈第一次举行线下+线上的发布会。现场座无虚席,线上直播也...

aresn
2018/07/30
12.7K
27
iView 发布 3.0 版本,以及开发者社区等 5 款新产品

7 月 28 日,我们成功地召开了 iView 3.0 暨神秘新品发布会,这可能是前端开源圈第一次举行线下+线上的发布会。现场座无虚席,线上直播也有超过 2 万人观看。同时这一天也是 iView 两周岁生日...

Aresn
2018/10/29
0
0
elementUi、iview、ant Design源码button结构篇

在看elementUI的button组件的时候,一起和iview、ant Design的button组件比 较功能、样式、代码结构,看他们的一些不同点,不同的写法哪种会好些,button的对外开放的功能那些会 用到哪些会相...

核桃大号
2018/08/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot + Mybatis-Plus 集成与使用(二)

前言: 本章节介绍MyBatis-Puls的CRUD使用。在开始之前,先简单讲解下上章节关于Spring Boot是如何自动配置MyBatis-Plus。 一、自动配置 当Spring Boot应用从主方法main()启动后,首先加载S...

伴学编程
昨天
7
0
用最通俗的方法讲spring [一] ──── AOP

@[TOC](用最通俗的方法讲spring [一] ──── AOP) 写这个系列的目的(可以跳过不看) 自己写这个系列的目的,是因为自己是个比较笨的人,我曾一度怀疑自己的智商不适合干编程这个行业.因为在我...

小贼贼子
昨天
7
0
Flutter系列之在 macOS 上安装和配置 Flutter 开发环境

本文为Flutter开发环境在macOS下安装全过程: 一、系统配置要求 想要安装并运行 Flutter,你的开发环境需要最低满足以下要求: 操作系统:macOS(64位) 磁盘空间:700 MB(不包含 IDE 或其余...

過愙
昨天
6
0
OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
昨天
2.7K
16
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
昨天
42
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部