Java 将数据封装成树形结构

List<ComEventTypeTreeVo> result = new ArrayList<ComEventTypeTreeVo>();
//查询出数据

//封装数据
 result = generateTree(result);

//因为封装的时候没有去掉对应的非一级节点,所有需要处理一下
Iterator<ComEventTypeTreeVo> iterator = result.iterator();
        //去掉一级目录中非公司节点数据
        while (iterator.hasNext()){
            if(!EventTypeLevelEnum.COMPANY.getCode().equals(iterator.next().getLevel())){
                iterator.remove();
            }
        }

return result;



/**
     * 将数据封装为树结构
     * @param result
     * @return
     */
    private List<ComEventTypeTreeVo> generateTree(List<ComEventTypeTreeVo> result) {
        Map<String, List<ComEventTypeTreeVo>> map = new HashMap<String, List<ComEventTypeTreeVo>>();
        for (ComEventTypeTreeVo resourceTypeTreeVo : result) {
            List<ComEventTypeTreeVo> myChilrenList = map.get(resourceTypeTreeVo.getId());
            if(myChilrenList == null){
                myChilrenList = new ArrayList<ComEventTypeTreeVo>();
                map.put(resourceTypeTreeVo.getId(), myChilrenList);
            }
            resourceTypeTreeVo.setList(myChilrenList);
            List<ComEventTypeTreeVo> myParentChildrenList = map.get(resourceTypeTreeVo.getParentId());
            if(myParentChildrenList == null){
                myParentChildrenList = new ArrayList<ComEventTypeTreeVo>();
                map.put(resourceTypeTreeVo.getParentId(), myParentChildrenList);
            }
            myParentChildrenList.add(resourceTypeTreeVo);
        }
        return result;
    }


ComEventTypeTreeVo类:

@Data
@ApiModel("类型树结构")
public class ComEventTypeTreeVo {

    @ApiModelProperty(value = "主键")
    private String id;

    @ApiModelProperty(value = "标题")
    private String title;

    @ApiModelProperty(value = "级别")
    private Integer level;

    @ApiModelProperty(value = "父级ID")
    private String parentId;

    @ApiModelProperty(value = "项目公司级")
    private String type;

    @ApiModelProperty(value = "是否有效,0无效,1有效",required = false)
    private Integer enable;

    @ApiModelProperty(value = "子节点")
    private List<ComEventTypeTreeVo> list;

}

组装多个树形结构,附上相关代码,便于记忆

@Override
    public ComAndEventTypeTree selectEventTypeTree(String token, String organizationId) {

        //返回结果
        ComAndEventTypeTree result = new ComAndEventTypeTree();

        //公司级树
//        List<ComEventTypeTreeVo> comList = new ArrayList<>();
        //项目级树
        List<EventTypeTreeVo> list = new ArrayList<>();
        //公司级树
        List<EventTypeTreeVo> comlist = new ArrayList<>();


        //远程获取用户拥有公司权限
        Wrapper<UserAuthOrgTreeVo> userAuthOr = uacOrganizationApi.findOrganizationParentNode(PemConstants.BEARER+token,token, String.valueOf(organizationId),0);
        String companyId = userAuthOr.getResult().getId();

        //查询对应的公司信息
        Wrapper<ReOrganizationVo> wrapperOrganizationFrom = uacOrganizationApi.displayInfo(PemConstants.BEARER+token,token, String.valueOf(companyId));
        ReOrganizationVo organizationFrom = wrapperOrganizationFrom.getResult();

        //加入一级节点
        result.setLevel(EventTypeLevelEnum.COMPANY.getCode());
        result.setTitle(organizationFrom.getOrgName());
        result.setId(String.valueOf(organizationFrom.getId()));
        result.setType("COMPANY");

        //查询项目级事件类型
        List<String> companyIds = new ArrayList<String>();
        companyIds.add(companyId);

        List<Integer> levelList = new ArrayList<Integer>();
        levelList.add(EventTypeLevelEnum.FIRST.getCode());
        levelList.add(EventTypeLevelEnum.SECOND.getCode());
        levelList.add(EventTypeLevelEnum.THIRD.getCode());
        levelList.add(EventTypeLevelEnum.FOUR.getCode());
        levelList.add(EventTypeLevelEnum.FIVE.getCode());
        levelList.add(EventTypeLevelEnum.SIX.getCode());

        Map<String, Object> param = new HashMap<String, Object>();
        param.put("organizationId", organizationId);
        param.put("levelList", levelList);
        param.put("companyIdList", companyIds);
        //param.put("enable",1);
        param.put("typeLevel",2);
        List<EventTypeVo> resultEvent = eventTypeMapper.selectEventTypeByParams(param);

        for (EventTypeVo eventTypeVo : resultEvent) {
            EventTypeTreeVo eventTypeTreeVo = new EventTypeTreeVo();
            eventTypeTreeVo.setId(eventTypeVo.getId());
            eventTypeTreeVo.setTitle(eventTypeVo.getEventName());
            eventTypeTreeVo.setParentId(eventTypeVo.getParentId());
            eventTypeTreeVo.setEnable(eventTypeVo.getEnable());
            eventTypeTreeVo.setType("PROJECT");
            eventTypeTreeVo.setLevel(eventTypeVo.getLevel());
            list.add(eventTypeTreeVo);
        }

        list = generateTree(list);

        //去掉一级目录中非一级节点数据
        Iterator<EventTypeTreeVo> eviterator = list.iterator();
        while (eviterator.hasNext()){
            if(!EventTypeLevelEnum.FIRST.getCode().equals(eviterator.next().getLevel())){
                eviterator.remove();
            }
        }


        //查询公司级事件类型
        List<Integer> typeLevels = new ArrayList<>();
        param.put("typeLevel",null);
        typeLevels.add(1);
        typeLevels.add(2);
        param.put("typeLevels",typeLevels);
        param.put("eventSource",2);
        param.put("compEval","1");
        List<EventTypeVo> comEventTypes = eventTypeMapper.selectEventTypeByParams(param);
        for (EventTypeVo comEventType : comEventTypes) {
            EventTypeTreeVo eventTypeTreeVo = new EventTypeTreeVo();
            eventTypeTreeVo.setId(comEventType.getId());
            eventTypeTreeVo.setTitle(comEventType.getEventName());
            eventTypeTreeVo.setParentId(comEventType.getParentId());
            eventTypeTreeVo.setLevel(comEventType.getLevel());
            eventTypeTreeVo.setEnable(comEventType.getEnable());
            if(comEventType.getTypeLevel() == 1){
                eventTypeTreeVo.setType("COMPANY");
            }else{
                eventTypeTreeVo.setType("PROJECT");
            }

           

comlist.add(eventTypeTreeVo);
        }

        comlist = generateTree(comlist);
        //去掉一级目录中非一级节点数据
        Iterator<EventTypeTreeVo> iterator = comlist.iterator();
        while (iterator.hasNext()){
            if(!EventTypeLevelEnum.FIRST.getCode().equals(iterator.next().getLevel())){
                iterator.remove();
            }
        }

        list.addAll(comlist);
        result.setList(list);
        return result;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值