指标数据解析生成方法 - 递归生成IndicatorsVO对象列表

本文介绍如何使用递归方式解析指标数据,并生成IndicatorsVO对象的列表。指标数据以JSON格式存储,包含指标名称、id、分值、父级id等信息。通过对指标数据进行分组和递归解析,最终生成一个层次化的指标列表,方便后续展示和操作。

指标数据示例

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

parentId是父级的id。

指标数据实体类

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;
    }

}

生成方法

可以使用递归的方式解析生成IndicatorsVO对象的List。首先需要将传入的指标列表按照parentId进行分组,然后遍历每个分组,将每个分组的指标转换成IndicatorsVO对象,并将子指标列表递归转换成IndicatorsVO对象的children属性。具体实现可以参考以下代码:

public List<IndicatorsVO> generateIndicatorsList(List<Indicator> indicators, String parentId) {
    List<IndicatorsVO> result = new ArrayList<>();

    // 按照parentId进行分组
    Map<String, List<Indicator>> groupedIndicators = indicators.stream()
            .collect(Collectors.groupingBy(Indicator::getParentId));

    // 获取指定parentId的子指标列表
    List<Indicator> childIndicators = groupedIndicators.get(parentId);
    if (childIndicators != null) {
        for (Indicator indicator : childIndicators) {
            IndicatorsVO indicatorsVO = new IndicatorsVO();
            indicatorsVO.setTitle(indicator.getFirstName());
            indicatorsVO.setDataIndex(indicator.getId());
            indicatorsVO.setKey(indicator.getId());
            indicatorsVO.setScore(indicator.getScore());
            indicatorsVO.setCustomRender(new IndicatorsVO.CustomRender());

            // 递归生成子指标列表
            List<IndicatorsVO> children = generateIndicatorsList(indicators, indicator.getId());
            indicatorsVO.setChildren(children);

            result.add(indicatorsVO);
        }
    }

    return result;
}

调用该方法时,传入指标列表和根节点的parentId即可生成IndicatorsVO对象的List,其中根节点的parentId应该为null

代码示例

// 指标数据示例
List<Indicator> indicators = Arrays.asList(
        new Indicator("402880c288ae5f700188b3564a9a00a0", "一级指标1", 30, 0, null),
        new Indicator("402880c288ae5f700188b3564a9a00a0", "一级指标1", 30, 0, "402880c288ae5f700188b3564a9a00a0")
);

// 生成指标列表
List<IndicatorsVO> indicatorsVOList = generateIndicatorsList(indicators, null);

// 打印结果
System.out.println(indicatorsVOList);

总结

本文介绍了如何使用递归方式解析指标数据并生成IndicatorsVO对象列表的方法。该方法可以有效地将指标数据转换为层次化的结构,方便后续的展示和操作。

注意

在实际应用中,指标数据可能更加复杂,例如包含多个层级、自定义属性等。需要根据具体情况对代码进行调整。


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

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