当前位置: 首页 > news >正文

后端返回树结构

出参结构

@Getter
@Setter
public class TreeResponse implements Serializable {// 主键private Long id;// 父级节点private Long parentId;// 层级private Byte layer;// 编码private String docCode;// 名称private String docName;// 子节点private List<TreeResponse> childNode;
}

方案一:生撸

public Result<List<TreeResponse>> listTreeData(String code) {// 查询全量数据List<TreeResponse> tempTreeResponse = new ArrayList<>();// 树节点转换return Result.success(convertTreeStructure(tempTreeResponse));
}/*** 树形转换** @param tempTreeResponse 档案信息* @return 档案信息-树*/
private List<TreeResponse> convertTreeStructure(List<TreeResponse> tempTreeResponse) {// 获取第一层级List<TreeResponse> treeResponse = tempTreeResponse.stream().filter(value -> Objects.isNull(value.getParentId())).collect(Collectors.toList());// 获取非第一层级数据,并以父级ID进行分组Map<Long, List<TreeResponse>> notFirstLayerData = tempTreeResponse.stream().filter(value -> Objects.nonNull(value.getParentId())).collect(Collectors.groupingBy(TreeResponse::getParentId));treeResponse.forEach(data -> setChildData(data, notFirstLayerData));return treeResponse;
}/*** 设置子节点** @param parentInfo        父节点信息* @param notFirstLayerData 非首节点信息*/
private void setChildData(TreeResponse parentInfo, Map<Long, List<TreeResponse>> notFirstLayerData) {List<TreeResponse> childData = notFirstLayerData.get(parentInfo.getId());if (CollectionUtils.isNotEmpty(childData)) {parentInfo.setChildNode(childData);childData.forEach(data -> setChildData(data, notFirstLayerData));}
}

方案二:Hutool

//配置
TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
// 自定义属性名 都要默认值的
treeNodeConfig.setWeightKey("order");
treeNodeConfig.setIdKey("rid");
// 最大递归深度
treeNodeConfig.setDeep(3);//转换器 (含义:找出父节点为字符串零的所有子节点, 并递归查找对应的子节点, 深度最多为 3)
List<Tree<String>> treeNodes = TreeUtil.<TreeNode, String>build(nodeList, "0", treeNodeConfig,(treeNode, tree) -> {tree.setId(treeNode.getId());tree.setParentId(treeNode.getParentId());tree.setWeight(treeNode.getWeight());tree.setName(treeNode.getName());// 扩展属性 ...tree.putExtra("extraField", 666);tree.putExtra("other", new Object());});
http://www.lryc.cn/news/340906.html

相关文章:

  • C语言——通讯录的实现
  • Next-Scale Prediction、InstantStyle、Co-Speech Gesture Generation
  • class中 padding和margin的用法;
  • 单独使用YOLOV9的backbone网络
  • WordPress JS Support Ticket插件 RCE漏洞复现
  • 加盟代理短视频无人直播项目,开启互联网线上经营新模式
  • spring高级篇(一)
  • 免费的GPT-3.5 API服务aurora
  • 突破编程_C++_网络编程(Windows 套接字(处理 TCP 粘包问题))
  • 【训练营】DateWhale——动手学大模型应用开发(更新中)
  • 【学习笔记十九】EWM Yard Management概述及后台配置
  • 【环境搭建】(五)Ubuntu22.04安装cuda_11.8.0+cudnn_8.6.0
  • 【UE5.1】使用MySQL and MariaDB Integration插件——(3)表格形式显示数据
  • JVM复习
  • 63、ARM/STM32中IIC相关学习20240417
  • 离岸人民币与人民币国际化
  • Linux平台上部署和运行Ollama的全面指南
  • Web---robots协议详解
  • 华为海思校园招聘-芯片-数字 IC 方向 题目分享——第四套
  • clipper一些数据结构(入门初识(一))
  • 读《SQL基础教程 第二版 上》的一些总结
  • EDI是什么:EDI系统功能介绍
  • 64B/66B GT Transceiver 配置
  • ES6: promise对象与回调地狱
  • Qt事件处理机制2-事件函数的传播
  • 【PDF.js】PDF文件预览
  • 从建表语句带你学习doris_表索引
  • Linux CentOS 安装 MySQL 服务教程
  • MSSQL 命令行操作说明 sql server 2022 命令行下进行配置管理
  • 【系统分析师】系统安全分析与设计