LambdaQueryWrapper<PyDirectory> lambdaQueryWrapper = Wrappers.lambdaQuery();
lambdaQueryWrapper.select(PyDirectory::getId, PyDirectory::getParentId, PyDirectory::getClassifyName);
List<PyDirectory> pyDirectoryList = pyDirectoryMapper.selectList(lambdaQueryWrapper);
// 将查询结果转化为PyDirectoryDto对象,并放入一个List集合dto中
List<PyDirectoryDto> dto = pyDirectoryList.stream()
//把实体类转为Vo
.map(pyDirectory -> BeanUtil.copyProperties(pyDirectory,PyDirectoryDto.class))
.collect(Collectors.toList());
// 根据parentId分组,将相同parentId的元素放入同一组,以Map<Integer, List<PyDirectoryDto>>的形式返回
Map<Integer, List<PyDirectoryDto>> map = dto.stream().collect(Collectors.groupingBy(PyDirectoryDto::getParentId));
dto.forEach(System.out::println);
// 遍历每个catalogNode,如果其id在map中存在对应的值,则将该值作为其list属性
dto.forEach(i -> i.setList(map.getOrDefault(i.getId(), new ArrayList<>())));
return R.Success(map.get(-1));
数据库的设计
运行之后的结果
{
"code": 100200,
"msg": "返回成功",
"data": [
{
"id": 1,
"classifyName": "脚本分类",
"parentId": -1,
"list": [
{
"id": 2,
"classifyName": "修改后的名字",
"parentId": 1,
"list": [
{
"id": 3,
"classifyName": "修改后的名字",
"parentId": 2,
"list": []
}
]
},
{
"id": 4,
"classifyName": "gafawef",
"parentId": 1,
"list": [
{
"id": 5,
"classifyName": "dfasdf",
"parentId": 4,
"list": []
},
{
"id": 6,
"classifyName": "asdd",
"parentId": 4,
"list": [
{
"id": 8,
"classifyName": "asf",
"parentId": 6,
"list": []
},
{
"id": 9,
"classifyName": "测试",
"parentId": 6,
"list": []
},
{
"id": 10,
"classifyName": "测试2",
"parentId": 6,
"list": []
}
]
}
]
},
{
"id": 7,
"classifyName": "ab",
"parentId": 1,
"list": []
}
]
}
]
}