1. 程式人生 > >java 遞迴查詢樹形選單結構(個人認為是最簡單的)

java 遞迴查詢樹形選單結構(個人認為是最簡單的)

/**
	 * 獲取無限級的類別資源
	 */
	@Override
	public List<Object> findTypeTree() throws BusinessException {
		Map<String,Object> map = new HashMap<>();
		map.put("EQ_parentId",0);
		Map<String, SearchFilter> filters = SearchFilter.parse(map);
		List<Order> orderList = new ArrayList<>();
		Order order = new Order("sortNum");
		orderList.add(order);
		Sort sort = new Sort(orderList);
		//預設查詢出所有的一級類別
		List<TypeInfo> typeList = (List<TypeInfo>) typeInfoRepository.findAll(DynamicSpecifications.bySearchFilter(filters.values(), TypeInfo.class),sort);
		List<Object> list = new ArrayList<>();
		for (TypeInfo typeInfo : typeList) {
			JSONObject treeObject = new JSONObject(true);
			treeObject.put("id", typeInfo.getTypeId());
			treeObject.put("text", typeInfo.getName());
			treeObject.put("children", getChildren(typeInfo.getTypeId()));
			list.add(treeObject);
		}
		return list;
	}
	public List<Object> getChildren(Long parentId){
		List<Object> list = new ArrayList<>();
		List<TypeInfo> children = typeInfoRepository.findTypeInfoByParentIdAndSortNum(parentId);
		for (TypeInfo typeInfo : children) {
			if(parentId == typeInfo.getParentId()) {
				JSONObject obj = new JSONObject(true);
				obj.put("id", typeInfo.getTypeId());
				obj.put("text", typeInfo.getName());
				obj.put("children", getChildren(typeInfo.getTypeId()));
				list.add(obj);
			}
		}
		return list;
	}

 getChildren()方法傳入一級類別的id 作為父id查詢出其子類別,然後遞迴掉用getChildren()方法 實現樹形選單結構樹