树结构生成示例模板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 @ 2024-08-01 14:45  sensen~||^_^|||&  阅读(12)  评论(0)    收藏  举报