java8 lambda 处理分类和子分类的技巧

来源:互联网 发布:c语言能够做什么 编辑:程序博客网 时间:2024/05/02 01:35
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));//  再次递归构建     }}