首页 > 其他分享 >获取树结构表最底层节点信息

获取树结构表最底层节点信息

时间:2023-05-19 14:57:57浏览次数:37  
标签:String 树结构 List mongoTemplate parentId query 节点 最底层

1、这里以mongo表为例

//1、查询根节点ID
List<T> list = mongoTemplate.find(Query.query(Criteria.where("parentId").is("")), T.class);
List<String> rootIds = list.stream().map(x -> x.getId()).collect(Collectors.toList());
//2、根据根节点ID查询出所有底层节点ID,塞到result集合
List<String> result = new ArrayList<>();
for (String rootId : rootIds) {
List<String> treeBottomIds = getBottomIds(rootId, mongoTemplate);
result.addAll(treeBottomIds);
}

//3、根据底层节点ID,打印出完成层级路径
for(String string : result){
String treeNames = getTreeNames(string, "");
System.out.println(treeNames);
}


// 定义递归方法,获取指定节点的子孙节点中最底层节点的ID列表
private List<String> getBottomIds(String id, MongoTemplate mongoTemplate) {
// 查询当前节点的子节点
Query query = Query.query(Criteria.where("parentId").is(id));
List<KgDictType> childrenDocs = mongoTemplate.find(query, KgDictType.class);

// 如果当前节点没有子节点,则当前节点即为最底层节点,返回当前节点ID
if (childrenDocs.isEmpty()) {
return Collections.singletonList(id);
}

// 如果有子节点,则递归查询所有子孙节点的最底层节点ID,并将结果合并去重
Set<String> bottomIds = new HashSet<>();
for (KgDictType childDoc : childrenDocs) {
List<String> childBottomIds = getBottomIds(childDoc.getId(), mongoTemplate);
bottomIds.addAll(childBottomIds);
}
return new ArrayList<>(bottomIds);
}


public String getTreeNames(String id, String name) {
// 查询该节点信息
T node = mongoTemplate.findOne(Query.query(Criteria.where("_id").is(id)), T.class);

// 如果未找到该节点,返回空字符串
if (node == null) {
return "";
}

// 查找上级树name
List<String> parentNames = new ArrayList<>();
String parentId = node.getParentId();
while (parentId != null) {
T parentNode = mongoTemplate.findOne(Query.query(Criteria.where("_id").is(parentId)), T.class);
if (parentNode != null) {
parentNames.add(parentNode.getName());
parentId = parentNode.getParentId();
} else {
parentId = null;
}
}

// 查找下级树name
List<String> childNames = new ArrayList<>();
// List<T> children = mongoTemplate.find(Query.query(Criteria.where("parentId").is(node.getId())), T.class);
// for (T child : children) {
// childNames.add(child.getName());
// }

// 拼接结果并返回
Collections.reverse(parentNames); // 反转顺序,使其自上向下排列
parentNames.add(org.apache.commons.lang3.StringUtils.isEmpty(name)?node.getName():name);
parentNames.addAll(childNames);
return String.join("-", parentNames);
}

 

标签:String,树结构,List,mongoTemplate,parentId,query,节点,最底层
From: https://www.cnblogs.com/wj123bk/p/17415097.html

相关文章

  • 【泛微】流程节点时效统计SQL
    selectrb.requestid,rb.`REQUESTNAME`,r2.LASTNAME,c.isremark,cast(CONCAT(RECEIVEDATE,'',RECEIVETIME)asdatetime)'接收时间',cast(CONCAT(OPERATEDATE,'',OPERATETIME)asdatetime)'处理时间',cast(CONCAT(firstviewdate,&#......
  • Redis Cluster两slave节点处理
    背景系统:CentOS7.6RedisClusterIP端口角色192.168.100.116380Master192.168.100.116381slave192.168.100.126380Master192.168.100.126381Slave192.168.100.136380Master192.168.100.136381Slave 因为某种原因导致(192.168.100.12)操......
  • (双指针)剑指 Offer 22. 链表中倒数第k个节点
    题目描述:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。    classSolution......
  • 4机10节点系统暂态稳定性仿真/Simulink仿真 1.基于MATLAB/Simulink
    4机10节点系统暂态稳定性仿真/Simulink仿真1.基于MATLAB/Simulink平台搭建4机10节点系统仿真模型,可以仿真单相接地/两相相间短路/两相接地短路/三相短路故障情况下系统的暂态特性。2.研究电力系统稳定器(powersystemstabilizer)PSS和静止无功补偿器(staticvarcompensator)SVC......
  • IEEE9节点系统Simulink仿真 1.基础功能:基于Matlab/simulink平台搭
    IEEE9节点系统Simulink仿真1.基础功能:基于Matlab/simulink平台搭建IEEE9节点仿真模型,对电力系统进行潮流计算(与编程用牛拉法计算潮流结果一致)2.拓展功能:可在该IEEE9节系统仿真模型上进行暂态、静态稳定性仿真分析。ID:11100694634841764......
  • IEEE15节点系统Simulink仿真 1.基础功能:基于Matlab/simulink平台搭建IE
    IEEE15节点系统Simulink仿真1.基础功能:基于Matlab/simulink平台搭建IEEE15节点仿真模型,对电力系统进行潮流计算2.拓展功能:可在该IEEE15节系统仿真模型上进行故障分析(短路,断线等),也可以在该模型上接入分布式电源,观察分布式电源接入对系统的影响。ID:35100694635645052......
  • 3机9节点系统暂态稳定Matlab编程/simulink仿真 1.Matlab编程计
    3机9节点系统暂态稳定Matlab编程/simulink仿真1.Matlab编程计算摇摆曲线,得到3机9节点系统中3台发电机的功角曲线以及转速曲线,通过分析各发电机之间的功角差和转速差来分析系统暂态稳定性。2.基于Simulink平台,搭建3机9节点系统,通过时域仿真,得到三台机组的功角曲线和转速差曲线,以此......
  • IEEE69节点系统Simulink仿真 1.基础功能:基于Matlab/simulink平台搭建IEE
    IEEE69节点系统Simulink仿真1.基础功能:基于Matlab/simulink平台搭建IEEE33节点仿真模型,对电力系统进行潮流计算2.拓展功能:可在该IEEE69节系统仿真模型上进行故障分析(短路,断线等),也可以在该模型上接入分布式电源,观察分布式电源接入对系统的影响。ID:41100684644275422......
  • 力扣---1448. 统计二叉树中好节点的数目
    给你一棵根为 root 的二叉树,请你返回二叉树中好节点的数目。「好节点」X定义为:从根到该节点X所经过的节点中,没有任何节点的值大于X的值。 示例1:输入:root=[3,1,4,3,null,1,5]输出:4解释:图中蓝色节点为好节点。根节点(3)永远是个好节点。节点4->(3,4)是路径中......
  • 利用鲸鱼算法WOA优化随机森林RF,确定最优的叶子节点数与树数,然后将最优的参数输入随机
    利用鲸鱼算法WOA优化随机森林RF,确定最优的叶子节点数与树数,然后将最优的参数输入随机森林模型中做多维输入单维输出的回归预测,实现提高模型预测精度的效果,模型中都有基本的注释和测试数据集,直接替换数据就可以使用。ID:7430667081761891......