無限極構建許可權樹
阿新 • • 發佈:2020-09-19
/** * 建一個listTemp供迴圈用(注意這是類似同一人在兩公司供職的情景) */ public static List<Permission> formartWholeTree(List<Permission> wholePermissions) { List<Permission> lev1s = wholePermissions.stream().filter(i->i.getParentId()==0).sorted((a,b)->a.getSortNum()-b.getSortNum()).collect(Collectors.toList()); List<Permission> listTemp = new ArrayList<Permission>(); wholePermissions.stream().forEach(e->listTemp.add(e)); // 元素兩邊供職 List<Integer> removeIds = new ArrayList<Integer>(); // 可提高效能 while(listTemp.size()>0) { Permission t = listTemp.remove(0); removeIds.add(t.getId()); for(Permission p: wholePermissions) { if(p.getParentId()==t.getId()) { if(!t.getChilds().stream().map(m->m.getId()).collect(Collectors.toList()).contains(p.getId())) { t.getChilds().add(p); } if(!removeIds.contains(p.getId()))listTemp.add(listTemp.size(),p); } } } return lev1s; }