树结构生成示例模板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;
}

 

 

////////

 

posted @   sensen~||^_^|||&  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
历史上的今天:
2021-08-01 @Import注解
点击右上角即可分享
微信分享提示