JAVA通过泛型把List转成treeList
1.核心类:TreeListUtil<T extends TreeListDTO>
依赖基础类TreeListDTO
package com.example.demo.utils;
import com.example.demo.controller.dto.TreeListDTO;
import java.util.ArrayList;
import java.util.List;
public class TreeListUtil<T extends TreeListDTO<T>> {
public List<T> treeList(List<T> list, Integer parentId) {
List<T> treeListResult = new ArrayList<>();
for (T each : list) {
if (parentId.equals(each.getParentId())) {
each.setChildren(treeList(list,each.getId()));
treeListResult.add(each);
}
}
return treeListResult;
}
}
2.基础类:TreeListDTO
package com.example.demo.controller.dto;
import java.util.List;
public class TreeListDTO<T> {
private Integer id;
private Integer parentId;
private List<T> Children;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getParentId() {
return parentId;
}
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
public List<T> getChildren() {
return Children;
}
public void setChildren(List<T> children) {
Children = children;
}
}
3.引用核心类把菜单进行递归展示:
依赖菜单类MenuDTO
public List<MenuDTO> getMenu(){
//创建一级菜单水果
MenuDTO menuDTO1 = new MenuDTO();
menuDTO1.setId(1);
menuDTO1.setName("水果");
menuDTO1.setParentId(0);
//创建一级菜单蔬菜
MenuDTO menuDTO2 = new MenuDTO();
menuDTO2.setId(2);
menuDTO2.setName("蔬菜");
menuDTO2.setParentId(0);
//创建二级菜单蔬菜
MenuDTO menuDTO3 = new MenuDTO();
menuDTO3.setId(3);
menuDTO3.setName("苹果");
menuDTO3.setParentId(1);
//添加到menuDTOList
List<MenuDTO> menuDTOList = new ArrayList<>();
menuDTOList.add(menuDTO1);
menuDTOList.add(menuDTO2);
menuDTOList.add(menuDTO3);
//引入TreeListUtil
TreeListUtil<MenuDTO> treeListUtil = new TreeListUtil<MenuDTO>();
return treeListUtil.treeList(menuDTOList,0);
}
4.菜单类MenuDTO:
package com.example.demo.controller.dto;
public class MenuDTO extends TreeListDTO<MenuDTO> {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
展示效果如下:
[
{
"id": 1,
"parentId": 0,
"name": "水果",
"children": [
{
"id": 3,
"parentId": 1,
"name": "苹果",
"children": []
}
]
},
{
"id": 2,
"parentId": 0,
"name": "蔬菜",
"children": []
}
]
优点:想要递归展示的类都可以继承TreeListDTO,并且调用核心转换方法即可,
缺点:依赖TreeListDTO