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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 中,可以使用递归算法来快速封装树形结构数据。以下是一个示例代码,展示如何使用递归算法来封装树形结构数据: ```java public class TreeUtils { /** * 将数据列表封装树形结构 * @param dataList 数据列表 * @param <T> 数据类型 * @return 树形结构 */ public static <T extends TreeNode> List<T> buildTree(List<T> dataList) { List<T> treeList = new ArrayList<>(); // 构建根节点 for (T node : dataList) { if (node.getParentId() == null || node.getParentId().equals("")) { treeList.add(node); } } // 构建子节点 for (T node : treeList) { buildChildren(node, dataList); } return treeList; } /** * 递归构建子节点 * @param parentNode 父节点 * @param dataList 数据列表 * @param <T> 数据类型 */ private static <T extends TreeNode> void buildChildren(T parentNode, List<T> dataList) { for (T node : dataList) { if (node.getParentId() != null && node.getParentId().equals(parentNode.getId())) { parentNode.addChild(node); buildChildren(node, dataList); } } } } ``` 在上面的示例代码中,buildTree() 方法用于将数据列表封装树形结构,buildChildren() 方法用于递归构建子节点。在构建树形结构时,首先需要找到根节点,然后递归构建子节点。对于每个节点,可以通过 addChild() 方法将其添加到父节点的 children 列表中。 使用上述代码,可以快速地封装树形结构数据,并且可以方便地遍历和操作树形结构数据

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值