数组转树形结构只需两步
大约 2 分钟
已很经典的菜单为例,假设结构如下:
- id
- parent_id
- name
- xxx1
- xxx2
- ….
按照一比一构造一个类(只增加一个children字段):
@Data
public class XXXX{
private Long id;
private Long parentId;
private String name;
private String xxx1;
private String xxx2;
private List<XXXX> children;
}
public List<XXXX> treeMenu() {
List<XXXX> xxxxs = xxxxDao.menuList();
//第一步分组
Map<Long, List<XXXX>> parentId2Children =
xxxxs.stream().collect(Collectors.groupingBy(i -> i.getParentId()));
//第二步构造树
List<XXXX> roots = parentId2Children.remove(0L);
buildTree(roots, parentId2Children);
return roots;
}
private void buildTree(List<XXXX> parents,
Map<Long, List<XXXX>> parentId2Children) {
if (CollUtil.isEmpty(parents)) {
return;
}
parents.sort(Comparator.comparing(XXXX::getId));
for (XXXX parent : parents) {
List<XXXX> children = parentId2Children.remove(parent.getId());
parent.setChildren(children);
buildTree(children, parentId2Children);
}
}
系统推荐
- MyBatis
- Spring Cloud(一):服务治理技术概览【Finchley 版】
- JetBrains IDE 全破解
- 数据同步方案
- 搭建基于docker的elk平台来分析java日志
- 批量修改git历史记录中的用户名和邮箱
- Centos离线安装Docker
- 行转列不再复杂:SQL高手都在用的技巧揭秘
- gperftools
- CountDownLatch源码解读
- MySQL三大日志
- PostgreSQL JSON类型字段常用操作
- 随机毒鸡汤:承蒙你出现,够我心烦好多年。