最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Java实现返回树形结构
时间:2026-06-16 08:29:21 编辑:袖梨 来源:一聚教程网
一、需求说明
在做项目的时候前台要显示一个树形目录,比如下面这样:

二、添加数据库表
1、创建数据库表

2、添加测试数据

三、后端代码实现
PS:该测试类中的create_time和update_time写在BaseEntity中,可以忽略!!!
1、创建实体类
@TableName(value ="menu")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Menu extends BaseEntity implements Serializable {
/**
* 主键ID
*/
@TableId(type = IdType.AUTO)
private Integer id;
/**
* 菜单名称
*/
private String name;
/**
* 父id
*/
private Integer parentId;
/**
* 子节点信息
*/
@ApiModelProperty("子节点信息")
public List<Menu> childList;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
2、添加实现类
(1)添加一个查询所有数据接口
public List<Menu> searchAll() {
return menuMapper.searchAll();
}
<select id="searchAll" resultType="com.atjava.mybatisx.pojo.Menu">
select * from menu
</select>
实现方法一:
public List<Menu> searchTreeMenu() {
List<Menu> menus = searchAll();
List<Menu> TreeMenu = menus.stream().filter(m -> m.getParentId() == 1).map(
(m) -> {
m.setChildList(getChildrens(m,menus));
return m;
}
).collect(Collectors.toList());
return TreeMenu;
}
private List<Menu> getChildrens(Menu root, List<Menu> all) {
List<Menu> children = all.stream().filter(m -> {
return Objects.equals(m.getParentId(), root.getId());
}).map(
(m) -> {
m.setChildList(getChildrens(m, all));
return m;
}
).collect(Collectors.toList());
return children;
}
实现方法二:
public List<Menu> searchTreeMenu() {
List<Menu> menus = searchAll();
List<Menu> roots = new ArrayList<>();
List<Menu> TreeMenu = new ArrayList<>();
//获取最外层集合
for (Menu menu : menus) {
//0代表最高用户
if (menu.getParentId() == 0) {
roots.add(menu);
}
}
//从最高级别用户开始遍历,递归找到该用户的下级用户,将带有下级的最高级用户放入返回结果中
for (Menu root : roots) {
root = buildUserTree(menus, root);
TreeMenu.add(root);
}
return TreeMenu;
}
public Menu buildUserTree(List<Menu> allMenus, Menu menu) {
List<Menu> children = new ArrayList<>();
for (Menu menu1 : allMenus) {
//0代表根节点,无需重复比较
if (menu1.getParentId() == 0)
continue;
//当前用户的上级编号和传入的用户编号相等,表示该用户是传入用户的下级用户
if (menu1.getParentId() == menu.getId()) {
//递归调用,获取该用户的下级用户
menu1 = buildUserTree(allMenus, menu1);
children.add(menu1);
}
}
//给该用户的children属性赋值,并返回该用户
menu.setChildList(children);
return menu;
}
3、添加请求接口
@Api(tags = "菜单管理")
@RestController
@RequestMapping("/menu")
public class MenuController {
@Autowired
MenuService menuService;
@ApiOperation("获取树形菜单")
@GetMapping("/searchTreeMenu")
public ResponseResult<Menu> searchTreeMenu(){
List<Menu> menus = menuService.searchTreeMenu();
return ResponseResult.ok(menus);
}
}
四、使用swagger测试


总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持本站。
您可能感兴趣的文章:- java构建树形结构的实现过程
- java构建树形结构的方式及如何组装树状结构数据
- 使用Java实现通用树形结构构建工具类
- java如何用递归生成树形结构
- Java中递归构建树形结构的算法解读
- Java树形结构递归查询方式
相关文章
- 悠星大陆深渊乱斗怎么玩 深渊乱斗玩法介绍 07-31
- 《遥遥西土》峡谷唱片全收集攻略分享 07-31
- 王者荣耀英雄技能攻略(掌握技能,成就传奇王者) 07-31
- DDR4-3600 vs DDR5-5600游戏实测:低延迟与高带宽谁更适合游戏 07-31
- PS6光追性能暴涨10倍 AI与高刷新率或成主打 07-31
- 灌篮军团满级的零怎么培养 满级的零培养一览 07-31