树结构生成示例模板2种
方式一:
public List<DevCategory> list() {
List<DevCategory> allList = devCategoryDao.findAllData();
return allList.stream().filter(s -> s.getPid() == null || s.getPid().isBlank()).peek(item ->
findChildren(item, allList)).toList();
}
private void findChildren(DevCategory devCategory, List<DevCategory> allList) {
List<DevCategory> child = new ArrayList<>();
allList.forEach(s -> {
if (Objects.equals(String.valueOf(devCategory.getId()), s.getPid())) {
child.add(s);
findChildren(s, allList);
}
devCategory.setChildren(child);
});
}
方式二:
List<DevCategory> allList = devCategoryDao.findAllData();
return allList.stream().filter(s -> s.getPid() == null || s.getPid().isBlank())
.peek(item -> item.setChildren(findChildren(item.getId(), allList))).collect(Collectors.toList());
private List<DevCategory> findChildren(Long id, List<DevCategory> allList) {
return allList.stream().filter(s -> {
return Objects.equals(String.valueOf(id), s.getPid());
}).peek(item -> item.setChildren(findChildren(item.getId(), allList))).collect(Collectors.toList());
}
方式三:(在方式二的基础上添加redis缓存组件,注意添加了过期时间,并且在新增修改删除时会删除redis缓存的树结构缓存数据,以保证数据的一致性)
@Override
public List<BaseAreaTree> generateTree() {
// 从缓存中获取数据
List<BaseAreaTree> cacheTree = redisCache.getCacheObject(CacheConstants.HUB_BASE_AREA_TREE);
if (cacheTree != null) {
return cacheTree;
}
// 查询数据
List<BaseAreaTree> dbList = baseAreaTreeMapper.findAll();
List<BaseAreaTree> treeList = dbList.stream().filter(s -> s.getParentId() == null || s.getParentId() == 0L)
.peek(item -> item.setChildren(findChildren(item.getId(), dbList))).collect(Collectors.toList());
// 将数据缓存到 Redis
redisCache.setCacheObject(CacheConstants.HUB_BASE_AREA_TREE, treeList, 30 * 60, TimeUnit.SECONDS);
return treeList;
}
private List<BaseAreaTree> findChildren(Long id, List<BaseAreaTree> dbList) {
return dbList.stream().filter(s -> {
return Objects.equals(id, s.getParentId());
}).peek(item -> item.setChildren(findChildren(item.getId(), dbList))).collect(Collectors.toList());
}
// @Override
// public List<BaseAreaTree> generateTree() {
// List<BaseAreaTree> dbList = baseAreaTreeMapper.findAll();
// return dbList.stream().filter(s -> s.getParentId() == null || s.getParentId() == 0L)
// .peek(item -> item.setChildren(findChildren(item.getId(), dbList))).collect(Collectors.toList());
// }
//
// private List<BaseAreaTree> findChildren(Long id, List<BaseAreaTree> dbList) {
// return dbList.stream().filter(s -> {
// return Objects.equals(id, s.getParentId());
// }).peek(item -> item.setChildren(findChildren(item.getId(), dbList))).collect(Collectors.toList());
// }
/**
* 查询枢纽基础区域信息
*
* @param id 枢纽基础区域信息主键
* @return 枢纽基础区域信息
*/
@Override
public BaseAreaTree selectBaseAreaTreeById(Long id) {
return baseAreaTreeMapper.selectBaseAreaTreeById(id);
}
/**
* 查询枢纽基础区域信息列表
*
* @param baseAreaTree 枢纽基础区域信息
* @return 枢纽基础区域信息
*/
@Override
public List<BaseAreaTree> selectBaseAreaTreeList(BaseAreaTree baseAreaTree) {
return baseAreaTreeMapper.selectBaseAreaTreeList(baseAreaTree);
}
/**
* 新增枢纽基础区域信息
*
* @param baseAreaTree 枢纽基础区域信息
* @return 结果
*/
@Override
public int insertBaseAreaTree(BaseAreaTree baseAreaTree) {
int i = baseAreaTreeMapper.insertBaseAreaTree(baseAreaTree);
if (i > 0) {
redisCache.deleteObject(CacheConstants.HUB_BASE_AREA_TREE);
}
return i;
}
/**
* 修改枢纽基础区域信息
*
* @param baseAreaTree 枢纽基础区域信息
* @return 结果
*/
@Override
public int updateBaseAreaTree(BaseAreaTree baseAreaTree) {
int i = baseAreaTreeMapper.updateBaseAreaTree(baseAreaTree);
if (i > 0) {
redisCache.deleteObject(CacheConstants.HUB_BASE_AREA_TREE);
}
return i;
}
/**
* 批量删除枢纽基础区域信息
*
* @param ids 需要删除的枢纽基础区域信息主键
* @return 结果
*/
@Override
public int deleteBaseAreaTreeByIds(Long[] ids) {
int i = baseAreaTreeMapper.deleteBaseAreaTreeByIds(ids);
if (i > 0) {
redisCache.deleteObject(CacheConstants.HUB_BASE_AREA_TREE);
}
return i;
}
////////
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2021-08-01 @Import注解