集合根据父子节点进行排序
private List<ResAreaBean> sortParentAndChild(List<ResAreaBean> entities) {
Map<String, List<ResAreaBean>> pMap = new HashMap<String, List<ResAreaBean>>();
Set<String> ids = new HashSet<String>();
Set<String> pids = new HashSet<String>();
for (ResAreaBean entity : entities) {
ids.add(entity.getTreeCode());
String pid = entity.getParentAreaCode();
pids.add(pid);
if(null == pMap.get(pid)) {
pMap.put(pid, new ArrayList<ResAreaBean>());
}
pMap.get(pid).add(entity);
}
pids.removeAll(ids);
if (ids.size() < entities.size()) {
return null;
}
List<ResAreaBean> sortedList= new ArrayList<ResAreaBean>();
for (String rootPid : pids) {
List<ResAreaBean> queue = pMap.remove(rootPid);
if (null != queue) {
while(queue.size() > 0) {
ResAreaBean entity = queue.remove(0);
sortedList.add(entity);
List<ResAreaBean> tmpList = pMap.remove(entity.getTreeCode());
if (null != tmpList) {
queue.addAll(tmpList);
}
}
}
}
return sortedList;
}