Java递归解决多级列表的字段替换问题

Java递归解决多级列表的字段替换问题

一、前言

最近有个需求,需要做一个联级列表,数据是调用第三方获取的。前端同学想让我帮他把数据处理一下,换一下字段。

页面是这个样子:
在这里插入图片描述
修改之前的数据:

{
    "error": 0,
    "body": {
        "list": [
            {
                "deptLevel": "3",
                "deptCode": "484560642",
                "deptName": "业财运营部",
                "parentDeptCode": "57364999",
                "subDeptList": [
                            {
                        "deptLevel": "4",
                        "deptCode": "582020709",
                        "deptName": "数据运营组",
                        "parentDeptCode": "558333864",
                        "subDeptList": [
                            {
                                "deptLevel": "5",
                                "deptCode": "676189295",
                                "deptName": "线下运营组",
                                "parentDeptCode": "582020709"
                            },
                            {
                                "deptLevel": "5",
                                "deptCode": "676148284",
                                "deptName": "电商组",
                                "parentDeptCode": "582020709"
                            },
                            {
                                "deptLevel": "5",
                                "deptCode": "702186646",
                                "deptName": "品牌组",
                                "parentDeptCode": "582020709"
                            }
                        ]
                    },
                ]
            },

修改之后:

{
    "error": 0,
    "errorCode": "0",
    "message": "请求成功",
    "body": [
        {
            "label": "业务部",
            "value": "748",
            "children": [
                {
                    "label": "A作战部",
                    "value": "A作战部",
                    "children": [
                        {
                            "label": "A作战分部",
                            "value": "A作战分部"
                        },
                        {
                            "label": "B作战分部",
                            "value": "B作战分部"
                        },
                        {
                            "label": "C作战分部",
                            "value": "C作战分部"
                        },
                        {
                            "label": "广州作战分部",
                            "value": "广州作战分部",
                            "children": [
                                {
                                    "label": "广州谈判组",
                                    "value": "广州谈判组"
                                },
                                {
                                    "label": "广州执行组",
                                    "value": "广州执行组"
                                },
                                {
                                    "label": "粤西北执行组",
                                    "value": "粤西北执行组"
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    ]
}

二、 类

第三方返回的类:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * @date 2022/10/24 17:48
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DepartBo {
    private String deptLevel;
    private String deptCode;
    private String deptName;
    private String parentDeptCode;
    private List<DepartBo> subDeptList;
}

前端需要的类:

import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * @description 返回给前端的作战单元列表 组织树
 * @date 2022/10/31 13:39
 */
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class LabelVO {
    @ApiModelProperty("名称")
    private String label;

    @ApiModelProperty("值")
    private String value;

    @ApiModelProperty("孩子")
    private List<LabelVO> children;
}

三、我的代码

/**
     * 递归,将部门树的字段替换成前端需要的字段
     * @param bo
     * @return
     */
    private LabelVO replaceLabel(DepartBo bo) {
        List<LabelVO> children = null;
        if (CollectionUtils.isNotEmpty(bo.getSubDeptList())) {
            children = new ArrayList<>();
            for (DepartBo departBo : bo.getSubDeptList()) {
                children.add(this.replaceLabel(departBo));
            }
        }
        return LabelVO.builder().label(bo.getDeptName()).value(bo.getDeptName()).children(children).build();
    }

    @Override
    public List<LabelVO> combatUnit() {
        List<LabelVO> result = new ArrayList<>();
       		//从第三方接口获取的数据
            List<DepartmentBo> list = feignDeptInterface.queryDepartments().getList();
            if (CollectionUtils.isNotEmpty(list)) {
                //3.然后再调用部门书列表接口 传入deptCode部门编号
                for (DepartmentBo departmentBo : list) {
                    List<DepartBo> departBoList =
                            feignDeptInterface.queryDeptTreeList().getList();
                    List<LabelVO> labelVOList = new ArrayList<>();
                    for (DepartBo departBo : departBoList) {
                        labelVOList.add(this.replaceLabel(departBo));
                    }
                    result.add(LabelVO.builder().label(departmentBo.getDeptName()).value(departmentBo.getDeptName()).children(labelVOList).build());
                }
            }
        }
        return result;
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱喝皮蛋瘦肉粥的小饶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值