当前位置:网站首页>List转换为tree-项目真实使用
List转换为tree-项目真实使用
2022-07-26 04:57:00 【知识浅谈】
前提:数据库中查出来每一条数据构成链表,需要我们转换成树结构,id,pid(父节点的id) name
主要代码:public Node getRoot(List<Node> list)
0为根节点 1-9为次根节点 1.1-1.9 2.1-2.9 … 为次次根节点 看下方测试结果注意只有0的pid为-1
@RestController
public class AAA {
@RequestMapping("/project/test")
public Result get123(){
Test test = new Test();
List<Node> list = new ArrayList<>();
list.add(new Node("0","-1","根节点"));
list.add(new Node("9","0","9"));
list.add(new Node("9.1","9","9.1"));
list.add(new Node("1","0","1"));
list.add(new Node("1.1","1","1.1"));
list.add(new Node("2","0","2"));
list.add(new Node("2.1","2","2.1"));
list.add(new Node("3","0","3"));
list.add(new Node("3.1","3","3.1"));
list.add(new Node("3.1.2","3.1","3.1.2"));
Node root = test.getRoot(list);
Result<Object> result = new Result<>();
System.out.println(root);
result.setResult(root);
return result;
}
}
class Node{
String id;
String pid;
String name;
List<Node> children;
public Node(String id,String pid,String name){
this.id=id;
this.pid = pid;
this.name = name;
this.children = new ArrayList<>();
}
public List<Node> getChildren() {
return children;
}
public void setChildren(List<Node> children) {
this.children = children;
}
public void setId(String id){
this.id = id;
}
public void setPid(String pid) {
this.pid = pid;
}
public void setName(String name){
this.name = name;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public String getPid() {
return pid;
}
}
class Test{
public Node getRoot(List<Node> list){
Node root=null;
Map<String,Node> map= new HashMap<String,Node>();
for(Node n:list){
String id = n.getId();
Node node = map.get(id);
if(node==null){
node = n;
map.put(id,n);
}else{
node = map.get(id);
node.setPid(n.getPid());
node.setName(n.getName());
}
String pid = node.getPid();
if(pid.equals("-1")) {
//根结点的判断
root = node;
continue;
}
Node node1 = map.get(pid);
if(node1==null){
node1 = new Node(pid,"-1","头节点");
map.put(pid,node1);
}
node1.getChildren().add(node);
}
return root;
}
}
测试结果
{
"success": true,
"message": "操作成功!",
"code": 0,
"result": {
"id": "0",
"pid": "-1",
"name": "根节点",
"children": [
{
"id": "9",
"pid": "0",
"name": "9",
"children": [
{
"id": "9.1",
"pid": "9",
"name": "9.1",
"children": [
]
}
]
},
{
"id": "1",
"pid": "0",
"name": "1",
"children": [
{
"id": "1.1",
"pid": "1",
"name": "1.1",
"children": [
]
}
]
},
{
"id": "2",
"pid": "0",
"name": "2",
"children": [
{
"id": "2.1",
"pid": "2",
"name": "2.1",
"children": [
]
}
]
},
{
"id": "3",
"pid": "0",
"name": "3",
"children": [
{
"id": "3.1",
"pid": "3",
"name": "3.1",
"children": [
{
"id": "3.1.2",
"pid": "3.1",
"name": "3.1.2",
"children": [
]
}
]
}
]
}
]
},
"timestamp": 1651161878529
}
解释:
- 每次先查看map中是不是有id对应的key,如果有的话,说明之前添加过但是添加的对象只有id和children,这时候就需要把对应value中的对象的其他变量赋值,这个为什么只有id一会看到下边就知道了。
如果没有对应的key是id的话,添加key为id ,value为Node对象。 - 1中添加完id对应的Node之后,如果当前id节点的pid节点已存在,则把当前id节点添加到pid节点children数组中。如果不存在,需要先创建一个pid的新节点,并把新节点的id=pid,新节点添加到map中,并把1中的Node节点添加到新结点的children中(知道1中那个为什么只有id和children了吧)。
边栏推荐
- [learning notes] agc041
- Building blocks for domestic databases, stonedb integrated real-time HTAP database is officially open source!
- 九、文件上传和下载
- Autocomplete prevents the form from automatically filling in
- 补位,稍后补上
- ES6 modularization +commonjs
- What is the real HTAP? (1) Background article
- Customer service relationship management based on SQL net enterprise messenger enterprise communications
- mongoDB为什么快
- 【300+精选大厂面试题持续分享】大数据运维尖刀面试题专栏(八)
猜你喜欢
随机推荐
11、 Exception handler
Solve the error string value: '\xf0\x9f\x98\xad',... 'for column' commentcontent 'at row 1
Wsl2 best practices, eliminate difficult xshell and finalshell
Icml2022 | imitation learning by evaluating the professional knowledge of the presenter
Two ways to create MySQL database
mongoDB为什么快
软考回顾及计划
图像非局部均值滤波的原理
Axi protocol (5): burst mechanism of Axi protocol
5、 Domain objects share data
What are the demand management software for small and medium-sized enterprises
UE4 switching of control rights of multiple roles
2022 Henan Mengxin League game (3): Henan University a - corn cannon
idea插件离线安装(持续更新)
Array sort 2
QT compilation error sorting and remote module Download
Customer service relationship management based on SQL net enterprise messenger enterprise communications
Add watermark to ffmpeg video
2022杭电多校第二场 A.Static Query on Tree(树剖)
Torch slice maintenance









