张扬网站建设,网站页面总数,视频剪辑培训班,小制作小发明视频教程目录
省流#xff1a;
正文#xff1a;
v1.0版
前端传的值#xff1a;
后端代码#xff1a;
v2.0版
v3.0版 省流#xff1a;
前端提交过来整个树即可。
给整个树进行sort。代码如下#xff1a; public static void sort(ListNode tree){int i 0;for…目录
省流
正文
v1.0版
前端传的值
后端代码
v2.0版
v3.0版 省流
前端提交过来整个树即可。
给整个树进行sort。代码如下 public static void sort(ListNode tree){int i 0;for (Node o : tree) {o.setSort(i);if(o.getChild()!null){sort(o.getChild());}}}
这个只是单纯排序没有替换parentId。升级版本见正文。
排序完以后结果如下
一级节点的sort1234...
二级节点的sort每个一级节点下的二级节点都会从1开始排序1234...
|-- 一级节点1|--二级节点1|--二级节点2|--二级节点3
|-- 一级节点2|--二级节点1|--二级节点2|--二级节点3
|-- 一级节点3|--二级节点1|--二级节点2|--二级节点3 正文 v1.0版
前端传的值
{id: 雪花id,parentId: 雪花id,name:书籍,sort:1,children: [{id: 雪花id,parentId: 雪花id,name: 数学,sort: 1,children: [{children: [],id: 雪花id,parentId: 雪花id,name: 几何学,sort: 1,},{children: [],id: 雪花id,parentId: 雪花id,name: 代数学,sort: 2,},{children: [],id: 雪花id,parentId: 雪花id,name: 概率学,sort: 3,}]},{id: 雪花id,parentId: 雪花id,name: 物理,sort: 2,children: [{children: [],id: 雪花id,parentId: 雪花id,name: 光学,sort: 1,},{children: [],id: 雪花id,parentId: 雪花id,name: 力学,sort: 2,},{children: [],id: 雪花id,parentId: 雪花id,name: 量子学,sort: 3,}]},{id: 雪花id,parentId: 雪花id,name: 化学,sort: 3,children: [{children: [],id: 雪花id,parentId: 雪花id,name: 有机学,sort: 1,},{children: [],id: 雪花id,parentId: 雪花id,name: 无机学,sort: 2,},{children: [],id: 雪花id,parentId: 雪花id,name: 应用化学,sort: 3,}]}]
}
后端代码
后端模拟前端传值单元测试
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;public class SortT1 {public static void main(String[] args) {//一级节点Node firstNode1 new Node();Node firstNode2 new Node();Node firstNode3 new Node();ListNode first new ArrayList(Arrays.asList(firstNode1,firstNode2,firstNode3));//二级节点Node sec1First1 new Node();Node sec2First1 new Node();Node sec3First1 new Node();ListNode second1 new ArrayList(Arrays.asList(sec1First1,sec2First1,sec3First1));firstNode1.setChild(second1);Node sec1First2 new Node();Node sec2First2 new Node();Node sec3First2 new Node();ListNode second2 new ArrayList(Arrays.asList(sec1First2,sec2First2,sec3First2));firstNode2.setChild(second2);Node sec1First3 new Node();Node sec2First3 new Node();Node sec3First3 new Node();ListNode second3 new ArrayList(Arrays.asList(sec1First3,sec2First3,sec3First3));firstNode3.setChild(second3);sort(first);System.out.println(first);}public static void sort(ListNode tree){int i 0;for (Node o : tree) {o.setSort(i);if(o.getChild()!null){sort(o.getChild());}}}
}import java.util.List;public class Node {private Integer sort;private ListNode child;public Integer getSort() {return sort;}public void setSort(Integer sort) {this.sort sort;}public ListNode getChild() {return child;}public void setChild(ListNode child) {this.child child;}
}v2.0版
增加parentId public static void main(String[] args) {//一级节点Node firstNode1 new Node(0001);Node firstNode2 new Node(0002);Node firstNode3 new Node(0003);ListNode first new ArrayList(Arrays.asList(firstNode1,firstNode2,firstNode3));//二级节点Node sec1First1 new Node(00010001);Node sec2First1 new Node(00010002);Node sec3First1 new Node(00010003);ListNode second1 new ArrayList(Arrays.asList(sec1First1,sec2First1,sec3First1));firstNode1.setChild(second1);Node sec1First2 new Node(00020001);Node sec2First2 new Node(00020002);Node sec3First2 new Node(00020003);ListNode second2 new ArrayList(Arrays.asList(sec1First2,sec2First2,sec3First2));firstNode2.setChild(second2);Node sec1First3 new Node(00030001);Node sec2First3 new Node(00030002);Node sec3First3 new Node(00030003);ListNode second3 new ArrayList(Arrays.asList(sec1First3,sec2First3,sec3First3));firstNode3.setChild(second3);sort(first, 0);System.out.println(first);}public static void sort(ListNode tree,String parentId){int i 0;for (Node o : tree) {o.setSort(i);o.setParentId(parentId);if(o.getChild()!null){sort(o.getChild(),o.getId());}}}
public class Node {public Node(String id){this.id id;}private Integer sort;private ListNode child;private String id;private String parentId;
//省略了get set方法没写自己测的时候记得加上
}
v3.0版 保存到数据库将所有节点都放到一个list里。 public static void main(String[] args) {//省略前面的代码//...ListNode result new ArrayList();sort(first, 0, result);//将结果集保存到数据库xxxMapper.saveOrUpdate(result);}public static void sort(ListNode tree,String parentId,ListNode result){int i 0;for (Node o : tree) {o.setSort(i);o.setParentId(parentId);if(o.getChild()!null){sort(o.getChild(),o.getId(),result);}o.setChild(null);//递归走出来后就不需要child了result.add(o);//将当前节点存到结果集里}}注意为了避免意外发生生产上记得加上深度以防万一出现死循环导致栈溢出stackoverflow。 分割线
文章到此已经结束以下是紫薯布丁
|-- 一级节点1 |--二级节点1 |--二级节点2 |--二级节点3 |-- 一级节点2 |--二级节点1 |--二级节点2 |--二级节点3 |-- 一级节点3 |--二级节点1 |--二级节点2 |--二级节点3
{ id: 雪花id, parentId: 雪花id, name:书籍, sort:1, children: [ { id: 雪花id, parentId: 雪花id, name: 数学, sort: 1, children: [ { children: [], id: 雪花id, parentId: 雪花id, name: 几何学, sort: 1, }, { children: [], id: 雪花id, parentId: 雪花id, name: 代数学, sort: 2, }, { children: [], id: 雪花id, parentId: 雪花id, name: 概率学, sort: 3, } ] }, { id: 雪花id, parentId: 雪花id, name: 物理, sort: 2, children: [ { children: [], id: 雪花id, parentId: 雪花id, name: 光学, sort: 1, }, { children: [], id: 雪花id, parentId: 雪花id, name: 力学, sort: 2, }, { children: [], id: 雪花id, parentId: 雪花id, name: 量子学, sort: 3, } ] }, { id: 雪花id, parentId: 雪花id, name: 化学, sort: 3, children: [ { children: [], id: 雪花id, parentId: 雪花id, name: 有机学, sort: 1, }, { children: [], id: 雪花id, parentId: 雪花id, name: 无机学, sort: 2, }, { children: [], id: 雪花id, parentId: 雪花id, name: 应用化学, sort: 3, } ] } ] } import java.util.ArrayList; import java.util.Arrays; import java.util.List;
public class SortT1 { public static void main(String[] args) { //一级节点 Node firstNode1 new Node(); Node firstNode2 new Node(); Node firstNode3 new Node(); ListNode first new ArrayList(Arrays.asList(firstNode1,firstNode2,firstNode3)); //二级节点 Node sec1First1 new Node(); Node sec2First1 new Node(); Node sec3First1 new Node(); ListNode second1 new ArrayList(Arrays.asList(sec1First1,sec2First1,sec3First1)); firstNode1.setChild(second1); Node sec1First2 new Node(); Node sec2First2 new Node(); Node sec3First2 new Node(); ListNode second2 new ArrayList(Arrays.asList(sec1First2,sec2First2,sec3First2)); firstNode2.setChild(second2); Node sec1First3 new Node(); Node sec2First3 new Node(); Node sec3First3 new Node(); ListNode second3 new ArrayList(Arrays.asList(sec1First3,sec2First3,sec3First3)); firstNode3.setChild(second3); sort(first); System.out.println(first); } public static void sort(ListNode tree){ int i 0; for (Node o : tree) { o.setSort(i); if(o.getChild()!null){ sort(o.getChild()); } } } } public static void main(String[] args) { ListNode result new ArrayList(); sort(first, 0, result); //将结果集保存到数据库 xxxMapper.saveOrUpdate(result); } public static void sort(ListNode tree,String parentId,ListNode result){ int i 0; for (Node o : tree) { o.setSort(i); o.setParentId(parentId); if(o.getChild()!null){ sort(o.getChild(),o.getId(),result); } o.setChild(null);//递归走出来后就不需要child了 result.add(o);//将当前节点存到结果集里 } }
public class Node { public Node(String id){ this.id id; } private Integer sort; private ListNode child; private String id; private String parentId; //省略了get set方法没写自己测的时候记得加上 }