TreeNode实现Java列表转树形结构列表

Posted 娜一抹微笑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TreeNode实现Java列表转树形结构列表相关的知识,希望对你有一定的参考价值。

表结构

CREATE TABLE `test2` (
  `id` varchar(32) DEFAULT NULL,
  `prarentid` varchar(32) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

 实体类

@Data
public class Test2 {
  private String id;
  private String parentid;
  private String name;
}

访问数据接口

@Mapper
public interface Test2Mapper {
  List<Test2> selectTreeList();
}

业务实现类

@Service
@Slf4j
public class Test2Service {
 
  @Autowired
  private Test2Mapper test2Mapper;
 
  public List<Test2> getTreeList() {
    return test2Mapper.selectTreeList();
  }
}

控制层类

@Api(value = "TEST2管理", tags = {"TEST2管理"})
@RestController
@Slf4j
@RequestMapping("/test")
public class Test2Controller {
  @Autowired
  private Test2Service test2Service;
 
  @ApiOperation(value = "树形结构列表")
  @GetMapping("/list")
  public ResponseEntity listUser() {
    TreeNode node = new TreeNode();
    List<Test2> treeList = test2Service.getTreeList();
    if (treeList.size() > 0) {
      for (Test2 test : treeList) {
        // 初始化
        TreeNode tn = new TreeNode(test.getId(), test.getParentid(), test.getId(), test.getName());
        node.add(tn);
      }
    }
    return new ResponseEntity(PublicConstant.SUCCESS_CODE, PublicConstant.SUCCESS_MSG,
        node.getChildren());
  }
}

接口公共返回实体

@Data
public class ResponseEntity {
    //返回编码
    private String msgCode;
 
    //返回信息
    private String message;
 
    //返回的数据
    private Object data;
}

TreeNode工具类

package com.sb.util;
 
import java.util.ArrayList;
 
/**
 * TreeNode 工具类
 */
public class TreeNode {
  private String uuid;
  private String parentUuid;
  private String tagUuid;
  private String poiName;
  private ArrayList<TreeNode> children = new ArrayList<TreeNode>();
  public TreeNode() {}
  /**
   * 递归添加节点
   */
  public void add(TreeNode node) {
    if (node.parentUuid == null || "".equals(node.parentUuid)) {
      // 父节点
      this.children.add(node);
    } else if (node.parentUuid.equals(this.uuid)) {
      // 子节点
      this.children.add(node);
    } else {
      for (TreeNode tmp_node : children) {
        tmp_node.add(node);
      }
    }
  }
 
  public String getUuid() {
    return uuid;
  }
 
  public void setUuid(String uuid) {
    this.uuid = uuid;
  }
 
  public String getParentUuid() {
    return parentUuid;
  }
 
  public void setParentUuid(String parentUuid) {
    this.parentUuid = parentUuid;
  }
 
  public String getTagUuid() {
    return tagUuid;
  }
 
  public void setTagUuid(String tagUuid) {
    this.tagUuid = tagUuid;
  }
 
  public String getPoiName() {
    return poiName;
  }
 
  public void setPoiName(String poiName) {
    this.poiName = poiName;
  }
 
  public ArrayList<TreeNode> getChildren() {
    return children;
  }
 
  public void setChildren(ArrayList<TreeNode> children) {
    this.children = children;
  }
 
  public TreeNode(String uuid, String parentUuid, String tagUuid, String poiName) {
    this.uuid = uuid;
    this.parentUuid = parentUuid;
    this.tagUuid = tagUuid;
    this.poiName = poiName;
  }
}

接口请求结果

{
  "msgCode": "1000",
  "message": "操作成功",
  "data": [
    {
      "uuid": "1",
      "parentUuid": null,
      "tagUuid": "1",
      "poiName": "老三",
      "children": [
        {
          "uuid": "2",
          "parentUuid": "1",
          "tagUuid": "2",
          "poiName": "老四",
          "children": [
            {
              "uuid": "3",
              "parentUuid": "2",
              "tagUuid": "3",
              "poiName": "老五",
              "children": []
            }
          ]
        }
      ]
    }
  ]
}

 

以上是关于TreeNode实现Java列表转树形结构列表的主要内容,如果未能解决你的问题,请参考以下文章

组织机构列表转树形结构Hutool工具类TreeUtil

java构建树形列表(带children属性)

递归嵌套for循环map集合方式实现树形结构菜单列表查询

如何用python将几个列表转换成树形结构?

java 大数据树形结构

线性结构转树形结构(生成无限层级菜单)