java8 lambda 處理分類和子分類的技巧

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));//  再次遞歸構建
     }


}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章