public List<DealCategory> getCategories(){
List<DealCategory> roots = getAllWithoutDeleted(); // 这条语句可能是从缓存中或者是从数据库中直接拉去符合条件的数据
dealCategories.stream().filter(dealCategory -> (dealCategory.getParentId() == 0)).collect(Collectors.toList()); // 过滤出 父节点为0 所有分类
// 对所有分类进行排序
dealCategories.sort(new Comparator<DealCategory>(){
@Override
public int compare(DealCategory o1,DealCategory o2){
return o1.getOrderNum() > o2.getOrderNum() ? 1:-1;
}
});
// 过滤出所有的字节点
List<DealCategory> subs = dealCategories.stream().filter(dealCategory ->(dealCategory.getParentId() != 0)).collect(Collectors.toList());
// 对根分类进行遍历操作 -------->>>>>>>> 递归操作
roots.forEach(root -> buildSubs(root,subs));
return roots;
}
public static void buildSubs(DealCategory Parent,List<DealCategory> subs){
List<DealCategory> chilren = subs.stream().filter(sub -> (sub.getParentId()==getParent.getId())).collect(Collectors.toList()); // 获取子节点中属于父节点的分类
// 递归判断开始
if(!Collections.isEmpt(chilren)){ // 说明是有子类
Parent.setChildren(chilren); // 把该分类下的子类都构建关联关系
chilren.forEach(child ->buildSubs(child,subs));// 再次递归构建
}
}
java8 lambda 处理分类和子分类的技巧
最新推荐文章于 2025-05-21 21:58:28 发布