List<DeptVO> list = deptService.customList(deptVO, user.getType(), user.getRoleId());
//最顶层根节点
List<DeptVO> rootList = new ArrayList<>();
//非最顶层根节点
List<DeptVO> bodyList = new ArrayList<>();
for (DeptVO dept : list) {
if (dept.getParentId() == 0) {
rootList.add(dept);
} else {
bodyList.add(dept);
}
}
if (ObjectUtils.isNotEmpty(bodyList)) {
//声明一个map,用来过滤已操作过的数据
Map<String, String> map = new HashMap<>(bodyList.size());
rootList.forEach(parent -> getChild(parent, bodyList, map));
return R.data(rootList);
} else {
return R.data(rootList);
}
private void getChild(DeptVO deptVO, List<DeptVO> bodyList, Map<String, String> map) {
List<DeptVO> childList = new ArrayList<>();
bodyList.stream().filter(c -> !map.containsKey(c.getId()))
.filter(c -> c.getParentId().equals(deptVO.getId()))
.forEach(c -> {
map.put(c.getId().toString(), c.getParentId().toString());
getChild(c, bodyList, map);
childList.add(c);
});
deptVO.setChildren(childList);
}