目錄
- 遞回與Stream流轉換
- list轉為類中一個屬性為key,類實體為value的Map
- list單獨取出物件中一個屬性成為集合/陣列
- 步驟:--在此只寫service層代碼
遞回與Stream流轉換
今天寫一個很久以前一直不太會的,今天花了大量的時間進行研究處理,現將代碼決議于此
list轉為類中一個屬性為key,類實體為value的Map
Map<String, List<OrgTreeVo>> orgMap = orgList.stream().filter(h -> StringUtils.isNotEmpty(h.getParentId())).collect(Collectors.groupingBy(OrgTreeVo::getParentId));
list單獨取出物件中一個屬性成為集合/陣列
//成為集合
List<String> ids=list.stream().map(Person::getId).collect(Collectors.toList);
//成為陣列
Long names=list.stream().map(Person::getName).toArray(Long[]::new);
遍歷部門與人員難點:將所有部門遞回后,如何將人放入部門中前端才可遍歷處理
步驟:--在此只寫service層代碼
核心代碼:
@Resource
private OrgMapper orgMapper;
@Resource
private PersonMapper personMapper;
/**
* a.查詢組織樹
*/
public List<TreeVo> queryOrgTree() {
//1.查詢所有組織
List<TreeVo> orgList = orgMapper.queryAllOrgList();
//塞key便于前端遍歷樹(可優化)
orgList.stream().forEach(h->h.setKey(h.getId()));
//2.查詢所有有父級的組織 --查詢時最好賦值type型別 eg:org方便以后操作時區分部門與人
Map<String, List<OrgTreeVo>> orgMap = orgList.stream().filter(h -> StringUtils.isNotEmpty(h.getParentId())).collect(Collectors.groupingBy(OrgTreeVo::getParentId));
//3.獲得組織父級id--即(parentId)
Set<String> parentIds = orgMap.keySet();
//4.獲取所有根節點--即獲取最高層部門
List<OrgTreeVo> orgRootList = orgList.stream().filter(h -> StringUtils.isEmpty(h.getParentId())).collect(Collectors.toList());
//呼叫構造樹的方法
return recursiveTree(orgRootList, orgMap, parentIds);
}
/**
* b.構造樹
*/
public List<OrgTreeVo> recursiveTree(List<OrgTreeVo> orgRootList, Map<String, List<OrgTreeVo>> orgMap, Set<String> parentIds) {
//1.遍歷根節點--即遍歷高層(父級)部門
for (OrgTreeVo orgTreeVo : orgRootList) {
//如果組織父級id包含了正在遍歷中的組織的id
if (parentIds.contains(orgTreeVo.getId())) {
//2.將當前的組織Org物件賦值到父級的Children中
orgTreeVo.setChildren(orgMap.get(orgTreeVo.getId()));
//3.查詢當前組織下的人----查詢時最好賦值type型別 eg:person方便以后操作時區分部門與人,回傳型別與組織的回傳型別相同(方便前端遍歷處理)
List<OrgTreeVo> users = personMapper.selectByOrgtId(orgTreeVo.getId());
//塞key便于前端遍歷樹(可優化)
users.stream().forEach(h->h.setKey(h.getPersonId()));
//4.將人也添加到組織的Children中
orgTreeVo.getChildren().addAll(users);
//5.遞回呼叫自己
recursiveTree(orgTreeVo.getChildren(), orgMap, parentIds);
}
}
return orgRootList;
}
vo類:
/**
* 人員I
*/
@Data
public class OrgTreeVo {
/**
* 編碼
*/
private String key;
/**
* 節點主鍵id--即組織id
*/
private String id;
/**
* 節點父級主鍵id--即組織父級id
*/
private String parentId;
/**
* 節點名稱--即組織名稱
*/
private String name;
/**
* 型別--可在查詢時塞type eg:(person,org)
*/
private String type;
/**
* 人id
*/
private String personId;
/**
* 人名
*/
private String personName;
/**
* 人員所屬組織id
*/
private String orgId;
/**
* 子集 //Google的Lists可用其他代替
*/
private List<OrgTreeVo> children = Lists.newArrayListWithCapacity(8);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/538128.html
標籤:Java
