Java 指标数据解析生成列表 - 递归解析子级指标

本文将介绍如何利用 Java 语言解析指标数据并递归生成列表,实现指标树形结构的展现。

数据示例

假设我们有如下指标数据:

{id='402880c288ae5f700188b3564a9a00a0', firstName='一级指标1', score=30, lockout=0, parentId='null'}
{id='402880c288ae5f700188b3564a9a20a0', firstName='一级指标1', score=30, lockout=0, parentId='402880c288ae5f700188b3564a9a00a0'}
{id='402880c288ae5f700188b3564a9a0010', firstName='一级指标1', score=30, lockout=0, parentId='null'}

其中 parentId 表示父级指标的 id,例如第二条数据的 parentId 为 '402880c288ae5f700188b3564a9a00a0',表示其父级指标为第一条数据。

数据模型

public class IndicatorsVO {

    /**
     * 指标名称
     */
    @ApiModelProperty(value = '指标名称', dataType = 'String')
    private String title;
    /**
     * 指标id
     */
    @ApiModelProperty(value = '指标id')
    private String dataIndex;
    /**
     * 指标key
     */
    @ApiModelProperty(value = '指标key -id ', dataType = 'String')
    private String key;
    /**
     * 指标分值
     */
    @ApiModelProperty(value = '指标分值')
    private Integer score;
     /**
     * 指标插入
     */
    @ApiModelProperty(value = '指标插入')
    private CustomRender customRender;
    /**
     * 指标子集
     */
    @ApiModelProperty(value = '指标子集')
    private List<IndicatorsVO> children;

    /**
     * 指标子集
     */
    @ApiModelProperty(value = '居中')
    private String align;

    @Data
    @ApiModel(value = '考核指标插入')
     public static class CustomRender{
        /**
         * 指标插入
         */
        @ApiModelProperty(value = '指标插入')
        private String customRender;
    }

}

解析方法

public List<IndicatorsVO> parseIndicators(List<Indicators> indicatorsList) {
    List<IndicatorsVO> result = new ArrayList<>();
    // 遍历所有指标
    for (Indicators indicators : indicatorsList) {
        // 如果父级id为null,表示该指标为一级指标
        if (indicators.getParentId() == null) {
            IndicatorsVO indicatorsVO = new IndicatorsVO();
            indicatorsVO.setTitle(indicators.getFirstName());
            indicatorsVO.setDataIndex(indicators.getId());
            indicatorsVO.setKey(indicators.getId());
            indicatorsVO.setScore(indicators.getScore());
            // 如果有子级指标,递归解析子级指标
            if (indicatorsList.stream().anyMatch(i -> Objects.equals(i.getParentId(), indicators.getId()))) {
                indicatorsVO.setChildren(parseChildren(indicatorsList, indicators.getId()));
            }
            result.add(indicatorsVO);
        }
    }
    return result;
}

// 递归解析子级指标
private List<IndicatorsVO> parseChildren(List<Indicators> indicatorsList, String parentId) {
    List<IndicatorsVO> children = new ArrayList<>();
    // 遍历指标,找到父级id为parentId的指标
    for (Indicators indicators : indicatorsList) {
        if (Objects.equals(indicators.getParentId(), parentId)) {
            IndicatorsVO indicatorsVO = new IndicatorsVO();
            indicatorsVO.setTitle(indicators.getFirstName());
            indicatorsVO.setDataIndex(indicators.getId());
            indicatorsVO.setKey(indicators.getId());
            indicatorsVO.setScore(indicators.getScore());
            // 如果有子级指标,递归解析子级指标
            if (indicatorsList.stream().anyMatch(i -> Objects.equals(i.getParentId(), indicators.getId()))) {
                indicatorsVO.setChildren(parseChildren(indicatorsList, indicators.getId()));
            }
            children.add(indicatorsVO);
        }
    }
    return children;
}

代码解析

  1. parseIndicators 方法用于解析所有指标,并将一级指标加入到结果列表中。
  2. 遍历指标列表,判断指标的父级 id 是否为 null,如果是则表示该指标为一级指标。
  3. 将指标信息填充到 IndicatorsVO 对象中,并使用 parseChildren 方法递归解析子级指标。
  4. parseChildren 方法用于解析指定父级 id 的所有子级指标,并将子级指标加入到结果列表中。
  5. 递归调用 parseChildren 方法,直到所有子级指标都被解析完成。

代码使用

// 假设 indicatorsList 为包含指标数据的列表
List<IndicatorsVO> indicatorsVOList = parseIndicators(indicatorsList);
// indicatorsVOList 中将包含所有指标的列表,其中 children 属性包含了子级指标

通过以上代码,就可以将指标数据解析成树形结构的列表,方便后续的展示和操作。


原文地址: https://www.cveoy.top/t/topic/oDH3 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录