Java 指标数据解析生成列表 - 递归解析子级指标
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;
}
代码解析
parseIndicators方法用于解析所有指标,并将一级指标加入到结果列表中。- 遍历指标列表,判断指标的父级 id 是否为 null,如果是则表示该指标为一级指标。
- 将指标信息填充到
IndicatorsVO对象中,并使用parseChildren方法递归解析子级指标。 parseChildren方法用于解析指定父级 id 的所有子级指标,并将子级指标加入到结果列表中。- 递归调用
parseChildren方法,直到所有子级指标都被解析完成。
代码使用
// 假设 indicatorsList 为包含指标数据的列表
List<IndicatorsVO> indicatorsVOList = parseIndicators(indicatorsList);
// indicatorsVOList 中将包含所有指标的列表,其中 children 属性包含了子级指标
通过以上代码,就可以将指标数据解析成树形结构的列表,方便后续的展示和操作。
原文地址: https://www.cveoy.top/t/topic/oDH3 著作权归作者所有。请勿转载和采集!