树结构生成示例模板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;
    }
////////
                    
                
                
            
        
浙公网安备 33010602011771号