本篇文章为你整理了递归与Stream流转换(递归中static)的详细内容,包含有递归 stackoverflow 递归中static settimeout 递归 递归list 递归与Stream流转换,希望能帮助你了解 递归与Stream流转换。
目录递归与Stream流转换list转为类中一个属性为key,类实例为value的Maplist单独取出对象中一个属性成为集合/数组步骤:--在此只写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);
以上就是递归与Stream流转换(递归中static)的详细内容,想要了解更多 递归与Stream流转换的内容,请持续关注盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。