1. 程式人生 > 其它 >樹迭代迴圈 java8 用lambda表示式

樹迭代迴圈 java8 用lambda表示式

場景 同一個表 父和子 共存 ParentId 欄位使用 一般用於 選單或者省市區 使用

直接上程式碼 實體類 不提供 詳解 懂得自然懂:

    public CommonResult<List<GoodsCategoryTreeDTO>> goodsCategoryTree() {
QueryWrapper<ItemCategory> queryWrapper = new QueryWrapper<ItemCategory>().eq("status", 1).orderByAsc("sort");
List<ItemCategory> categoryEntities = itemCategoryService.list(queryWrapper);
//1.先找一級分類 categoryEntity.getParentId() == 0L
//2.查詢一級分類下的子類
List<GoodsCategoryTreeDTO> levelCategory = categoryEntities.stream().
filter(categoryEntity -> categoryEntity.getParentId() == 0L).
// sorted(Comparator.comparing(ItemCategory::getMenuOrder)).
//儲存當前分類的子分類
map(category -> {
//當前分類的子分類收集並返回
GoodsCategoryTreeDTO categoryTreeRespDTO = new GoodsCategoryTreeDTO();
BeanUtils.copyProperties(category, categoryTreeRespDTO);
categoryTreeRespDTO.setChildren(listSubMenu(category, categoryEntities));
return categoryTreeRespDTO;
}).collect(Collectors.toList());
return CommonResult.success(levelCategory);
}

public List<GoodsCategoryTreeDTO> listSubMenu(ItemCategory root, List<ItemCategory> all) {
List<GoodsCategoryTreeDTO> children = all.stream().
filter(e -> e.getParentId().equals(root.getId())).
map(categoryEntity -> {
//當前分類的子分類收集並返回
GoodsCategoryTreeDTO categoryTreeRespDTO = new GoodsCategoryTreeDTO();
BeanUtils.copyProperties(categoryEntity, categoryTreeRespDTO);
categoryTreeRespDTO.setChildren(listSubMenu(categoryEntity, all));
return categoryTreeRespDTO;
}).collect(Collectors.toList());
return children;
}