1. 程式人生 > 實用技巧 >無限極構建許可權樹

無限極構建許可權樹

/**
	 * 	建一個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;
	}