【JAVA】List<Object>类型构建树结构数据

前言

JAVA构建树形结构数据案例。

树形实体类

代码如下(示例):
get() || set() 方法就省略了,此处用lombok@Data注解代替

@Data
public class TreeBean {
    
    
    /**
     * id
     */
    private String id;
    /**
     * 名称
     */
    private String name;
    /**
     * 上级id
     */
    private String parentId;
    /**
     * 子集 集合
     */
    private List<TreeBean> children;

    /**
     * 无参构造
     */
    public TreeBean() {
    
    
    }

    /**
     * 自定义构造方法,省略子集变量
     * @param id
     * @param name
     * @param parentId
     */
    public TreeBean(String id, String name, String parentId) {
    
    
        this.id = id;
        this.name = name;
        this.parentId = parentId;
    }
}

lombok依赖坐标如下:

 <dependency>
     <groupId>org.projectlombok</groupId>
     <artifactId>lombok</artifactId>
     <version>1.18.18</version>
 </dependency>

数据构造示例

模拟数据

代码如下(示例):

@GetMapping("childrenTest")
    @ApiOperation(value = "树型结构数据测试接口",notes = "树型结构数据测试接口")
    public ResponseEntity<List<TreeBean>> childrenTest(){
    
    
    	// 造假数据,真实环境下通过数据库查询。
    	// new TreeBean("id","名称","父级id")
        List<TreeBean> list = new ArrayList<>();
        list.add(new TreeBean("001","中国","0"));
        list.add(new TreeBean("002","美国","0"));
        list.add(new TreeBean("003","俄罗斯","0"));
        list.add(new TreeBean("1","北京","001"));
        list.add(new TreeBean("2","天津","001"));
        list.add(new TreeBean("3","东城区","1"));
        list.add(new TreeBean("4","西城区","1"));
        list.add(new TreeBean("5","朝阳区","1"));
        list.add(new TreeBean("6","和平区","2"));
        list.add(new TreeBean("7","旧金山","002"));
        list.add(new TreeBean("8","圣彼得堡","002"));
        //调用构建树结构数据方法
        List<TreeBean> children = getChildren(list, "0");
        return ResponseEntity.ok(children);
    }

递归构造数据

代码如下(示例):

/**
 *构建树形结构数据
 * @param beanList:数据集合
 * @param parentId:父级标识(初始因该为最顶级的标识)
 * @return
 */
public static List<TreeBean> getChildren(List<TreeBean> beanList,String parentId){
    
    
    //创建返回树结构数据集合
    List<TreeBean> treeList = new ArrayList<>();
    for (TreeBean bean : beanList) {
    
    
        //创建当前节点的bean
        TreeBean treeBean = new TreeBean();
        //创建当前节点下子节点的数据集合
        List<TreeBean> childrenList = new ArrayList<>();
        //如果当前节点等于【参数】父节点,则进行递归操作
        if (parentId.equals(bean.getParentId())){
    
    
            //将节点数据复制到当前bean下,也就是上面创建的【treeBean对象】
            BeanUtils.copyProperties(bean,treeBean);
            //递归查询当前节点是否有子节点
            childrenList = getChildren(beanList,bean.getId());
            //有则将子节点的数据集合添加到当前bean下
            if (childrenList.size()>0){
    
    
                treeBean.setChildren(childrenList);
            }
            //将当前构建的树对象放入返回集合中
            treeList.add(treeBean);
        }
    }
    return treeList;
}

测试案例

[
  {
    
    
    "id": "001",
    "name": "中国",
    "parentId": "0",
    "children": [
      {
    
    
        "id": "1",
        "name": "北京",
        "parentId": "001",
        "children": [
          {
    
    
            "id": "3",
            "name": "东城区",
            "parentId": "1",
            "children": null
          },
          {
    
    
            "id": "4",
            "name": "西城区",
            "parentId": "1",
            "children": null
          },
          {
    
    
            "id": "5",
            "name": "朝阳区",
            "parentId": "1",
            "children": null
          }
        ]
      },
      {
    
    
        "id": "2",
        "name": "天津",
        "parentId": "001",
        "children": [
          {
    
    
            "id": "6",
            "name": "和平区",
            "parentId": "2",
            "children": null
          }
        ]
      }
    ]
  },
  {
    
    
    "id": "002",
    "name": "美国",
    "parentId": "0",
    "children": [
      {
    
    
        "id": "7",
        "name": "旧金山",
        "parentId": "002",
        "children": null
      },
      {
    
    
        "id": "8",
        "name": "圣彼得堡",
        "parentId": "002",
        "children": null
      }
    ]
  },
  {
    
    
    "id": "003",
    "name": "俄罗斯",
    "parentId": "0",
    "children": null
  }
]

猜你喜欢

转载自blog.csdn.net/SmallCat0912/article/details/128870938