21xrx.com
2024-11-10 00:55:33 Sunday
登录
文章检索 我的文章 写文章
Java List 转 Tree:一种快速构建树形结构的方法
2023-06-15 18:21:45 深夜i     --     --

Java List 转 Tree:一种快速构建树形结构的方法

在软件开发中,树形结构是一种非常常见的数据结构,如分类目录、组织结构等。在 Java 开发中,通常使用 List 存储数据,但当需要将数据以树形结构进行展示时,我们需要将 List 转换为 Tree。本文将介绍一种快速构建树形结构的方法。

我们假设有如下结构的数据:


[

   "parentId": 0,

   "parentId": 0,

   "parentId": 1,

   "parentId": 1,

   "parentId": 2,

  "id": 6,

   "parentId": 3,

   "name": "H",

   "parentId": 4,

   "parentId": 5

]

其中 id 表示节点的唯一标识,name 表示节点的名称,parentId 表示节点的父节点。

我们需要将这些数据转换为树形结构,如下所示:


[

  {

    "id": 1,

    "name": "A",

    "children": [

      {

        "id": 3,

        "name": "C",

        "children": [

          

            "id": 7,

          

            "id": 8

        ]

      },

      {

        "id": 4,

        "name": "D",

        "children": [

          

            "id": 9

        ]

      }

    ]

  },

  {

    "id": 2,

    "name": "B",

    "children": [

      {

        "id": 5,

        "name": "E",

        "children": [

          

            "name": "J"

          

        ]

      },

      

        "name": "F"

      

    ]

  }

]

我们可以通过递归构造树,具体步骤如下:

1. 遍历 List,找到根节点,即 parentId 为 0 的节点。

2. 针对每个根节点,递归查找其子节点,直到没有子节点。

3. 将根节点和子节点进行组合,得到最终的树形结构。

具体实现请参考下面的代码:


public class TreeNode {

  private Integer id;

  private String name;

  private List children;

  //构造器、getter、setter略...

  public static List buildTree(List nodes) {

    List tree = new ArrayList<>();

    for (TreeNode node : nodes) {

      if (node.getParentId() == 0) {

        tree.add(findChildren(node, nodes));

      }

    }

    return tree;

  }

  public static TreeNode findChildren(TreeNode node, List nodes) {

    for (TreeNode n : nodes) {

      if (n.getParentId().equals(node.getId())) {

        if (node.getChildren() == null) {

          node.setChildren(new ArrayList<>());

        }

        node.getChildren().add(findChildren(n, nodes));

      }

    }

    return node;

  }

}

我们可以通过以下关键词来概括本文的内容:

Java、List、Tree、递归、构造树形结构。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复