一般出现树形结构的数据表(该表记录的一个字段指向该表其他记录的主键),且数据量庞大时需要使用业务装配,以前使用过二级深度树的业务装配,这次是三级深度,作为初学者,还多想了一会,记录下来,以防不时之需。
List<Map<String, String>> queryData = dao.execSqlQuery();
// 定义结果数据列表
Map<String, Khycjpd> result = new HashMap<>();
// 循环将所有指标放入列表
for (Map<String, String> map : queryData) {
result.put(map.get("zbdm"), new Khycjpd(map.get("zbdm"), map.get("pzbdm"), kcptdm, map.get("zbnr"),
map.get("zbbl"), map.get("cjr"), map.get("cjsj"), map.get("xgr"), map.get("xgsj")));
}
String temp = "";
// 将所有三级子指标放入对应的二级父指标
for (Map<String, String> map : queryData) {
temp = map.get("pzbdm");
// 如果不是一级指标
if (!(temp == null || "".equals(temp))) {
// 获取父指标
Khycjpd khycjpd = result.get(temp);
// 父指标不是一级指标,即该指标是三级指标
if (khycjpd.getPzbdm() != null && !"".equals(khycjpd.getPzbdm())) {
// 添加该指标到其父指标
khycjpd.getZzbList().add(result.get(map.get("zbdm")));
// 删除该指标
result.remove(map.get("zbdm"));
}
}
}
// 将所有二级子指标放入对应的一级父指标
for (Map<String, String> map : queryData) {
temp = map.get("pzbdm");
// 如果不是一级指标
if (!(temp == null || "".equals(temp))) {
// 获取父指标
Khycjpd khycjpd = result.get(temp);
// 父指标是一级指标
if (khycjpd != null && (khycjpd.getPzbdm() == null || "".equals(khycjpd.getPzbdm()))) {
// 添加该指标到其父指标
khycjpd.getZzbList().add(result.get(map.get("zbdm")));
// 删除该指标
result.remove(map.get("zbdm"));
}
}
}