java树型数据的工具类

Java泛型:定义、使用与实战 泛型是Java SE 5.0中引入的一个新特性,它提供了编译时类型安全,减少了类型转换的代码,并提高了代码的可重用性。泛型,顾名思义,就是广泛的数据类型。在Java中,泛型允许我们在定义类、接口和方法时使用类型参数。这些类型参数在类、接口或方法被实例化时(即创建对象时)被具体的类型替换。这样,我们可以编写更加通用的代码,提高代码的可重用性。当我们需要自定义一些数据结构(如栈、队列等)时,泛型可以帮助我们编写更加通用的代码。通过使用泛型,我们可以使这些数据结构支持任意类型的元素。 阅读详情
public List<DeptVO> tree(String tenantId) {
   return ForestNodeMerger.merge(baseMapper.tree(tenantId));
}baseMapper.tree(tenantId)为目标数据源


ForestNodeMerger 工具类

import java.util.List;

public class ForestNodeMerger {
    public ForestNodeMerger() {
    }

    public static <T extends INode<T>> List<T> merge(List<T> items) {
        ForestNodeManager<T> forestNodeManager = new ForestNodeManager(items);
        items.forEach((forestNode) -> {
            if (forestNode.getParentId() != 0L) {
                INode<T> node = forestNodeManager.getTreeNodeAt(forestNode.getParentId());
                if (node != null) {
                    node.getChildren().add(forestNode);
                } else {
                    forestNodeManager.addParentId(forestNode.getId());
                }
            }

        });
        return forestNodeManager.getRoot();
    }
}

ForestNodeManager 工具类

import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class ForestNodeManager<T extends INode<T>> {
    private final ImmutableMap<Long, T> nodeMap;
    private final Map<Long, Object> parentIdMap = Maps.newHashMap();

    public ForestNodeManager(List<T> nodes) {
        this.nodeMap = Maps.uniqueIndex(nodes, INode::getId);
    }

    public INode<T> getTreeNodeAt(Long id) {
        return this.nodeMap.containsKey(id) ? (INode)this.nodeMap.get(id) : null;
    }

    public void addParentId(Long parentId) {
        this.parentIdMap.put(parentId, "");
    }

    public List<T> getRoot() {
        List<T> roots = new ArrayList();
        this.nodeMap.forEach((key, node) -> {
            if (node.getParentId() == 0L || this.parentIdMap.containsKey(node.getId())) {
                roots.add(node);
            }

        });
        return roots;
    }
}
INode<T> 接口
import java.io.Serializable;
import java.util.List;

public interface INode<T> extends Serializable {
    Long getId();

    Long getParentId();

    List<T> getChildren();

    default Boolean getHasChildren() {
        return false;
    }
}

 DeptVO 要继承INode接口

@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "DeptVO对象", description = "DeptVO对象")
public class DeptVO extends Dept implements INode<DeptVO> {
   private static final long serialVersionUID = 1L;

   /**
    * 主键ID
    */
   @JsonSerialize(using = ToStringSerializer.class)
   private Long id;
   
   //这三个为INode里的属性
   /**
    * 父节点ID
    */
   @JsonSerialize(using = ToStringSerializer.class)
   private Long parentId;

   /**
    * 子孙节点
    */
   @JsonInclude(JsonInclude.Include.NON_EMPTY)
   private List<DeptVO> children;

   /**
    * 是否有子孙节点
    */
   @JsonInclude(JsonInclude.Include.NON_EMPTY)
   private Boolean hasChildren;

   @Override
   public List<DeptVO> getChildren() {
      if (this.children == null) {
         this.children = new ArrayList<>();
      }
      return this.children;
   }

   /**
    * 上级机构
    */
   private String parentName;

   /**
    * 机构类型名称
    */
   private String deptCategoryName;

 

 

利用Java的反射、泛型以及动态参数实现JDBC工具类 利用Java的反射、泛型以及动态参数实现JDBC工具类,对于初学者来讲,除了可以锻炼编程思维,也为理解框架技术打下良好基础。分享给大家!package com.rock.util;import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepared 阅读详情

相关推荐

动态生成树 在数据库里配置数据,在前端显示树 jquery-ztree

1.前端用jquery-zTree插件,后端读取数据库配置,并封装成json格式,把树显示在前端。Strtus2+Spring架构。 2.内涵定时调度的配置和使用例子。Spring+Quartz

详细分析Java的树形工具类ForestNodeMerger(含注释)

对应的基本知识推荐如下: 【数据结构】树和二叉树详细分析(全) 【数据结构】B树和B+树的笔记详细诠释

码农研究僧的博客 1560

Nettrace 源码分析

文章介绍:本文将围绕腾讯开源项目nettrace工具中数据采集,数据处理,数据分析三个模块深入源码分析其实现细节

abobob的博客 989

后台菜单列表-懒加载列表实现代码

前言 树状列表数据太多的时候,一次查询出所有数据,组装成树状数据比较浪费性能,所以,采用懒加载的方式,用户每次点击一个节点,查询下该节点下的数据,提高性能。 controller层实现代码 @GetMapping("/lazy-list") @ApiImplicitParams({ @ApiImplicitParam(name = "code", value = "菜单编号", paramType = "query", dataType = "string".

洛阳泰山的博客 4271

Innovus每日精要 | 用setScanReorderMode优化扫描链,效率翻倍!

在数字后端物理设计的世界里,扫描链优化就像修路一样,既要保证数据流的顺畅,又要尽量减少绕路和资源浪费。它的主要任务是优化扫描链的连接方式,确保数据能快速、安全地流动。无论是多电压域设计、分区设计,还是复杂的逻辑门,它都能帮你搞定。后,你会发现它不仅能帮你节省时间,还能让你的设计更优雅、更高效。下次遇到扫描链问题时,不妨试试这些技巧,说不定你的设计效率会翻倍!,它能帮你搞定扫描链优化的那些事儿,让你的设计更高效、更优雅。接下来,我们看看这个命令的几个关键选项,以及它们的实际用途。扫描链优化看似枯燥,但掌握。

weixin_50820814的博客 1442

在Unity中为Sentis部署的YOLOv8模型集成NMS层并实现移动端性能优化

本文详细讲解了在Unity中利用Sentis部署YOLOv8模型时,如何通过代码动态集成NMS层以解决移动端性能瓶颈。文章核心在于避免导出时绑定NMS,转而使用Sentis原生API在运行时高效构建NMS处理流程,并分享了关键的GPU数据操作与移动端性能优化技巧,确保模型在移动设备上流畅运行。

p1q2r的博客 1093

获取字典树形结构框架树代码

在实体里面实现node的方法。controller层。mapper.xml层。新建一个node接口。service实现层。

weixin_67601403的博客 423

Qt Location实战:5分钟搞定地图插件切换与卫星图源加载(附完整代码)

本文是Qt Location开发系列教程的实战指南,详细讲解如何在Qt应用中快速实现地图插件(如Esri、OSM、MapboxGL)的动态切换与卫星图源的加载。通过清晰的代码示例,帮助开发者理解插件机制,解决常见配置问题,并在5分钟内构建出具备交互式地图切换功能的应用程序。

kafka6courier的博客 523

【实用工具】Java将对象列表转成树结构的两种方法

在系统开发过程中,可能会碰到一些需求,需要构建树形结构,数据库一般就使用父id来表示,比如构建菜单、构建地区级联、构建部门层级结构等等。虽然可以通过数据库SQL查询,但我们一般都是通过SQL一次性查询出所有数据,在程序中处理成树形结构。

秋装什么的博客 1539

土壤水动力学_前 言

Van Genuchten (V-G) 模型是土壤水分特征曲线中最常用的模型之一。它通过数学方程描述了土壤基质吸力与体积含水量之间的关系,被广泛应用于土壤水分运移、土壤盐渍化、边坡稳定性等研究领域。V-G模型是描述土壤水分特征曲线的重要工具,但它并不是完美的。在实际应用中,需要根据土壤类型、试验条件等因素选择合适的模型。土壤基质吸力是土壤水分学中的一个重要概念,它对土壤水分的保持、植物的生长以及土壤的工程性质都有重要影响。

weixin_44259522的博客 5324

PS射击游戏射线检测优化:原理、工程与全链路高性能实现

射线池:减少GC,提升批量检测效率。分层检测:先粗后细,远距离射击高效判定。批量检测:并行处理,适合大量射线场景。空间结构:进一步加速大场景检测。下面继续深入射线检测优化,补充更多实用细节和进阶技巧,包括空间分区加速、射线检测多线程/异步化、射线合并与分帧、射线池通用模板、常见性能陷阱与调优建议等。对于极端性能需求,可自定义轻量级物理系统,仅检测关键对象(如玩家、子弹),跳过复杂物理引擎。结合AABB、OBB、球体等简单碰撞体,射线-包围体检测极快。空间分区+分层检测是大场景射线优化核心。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 434

你应该了解的知识!突破CRUD | 万能树工具类封装

个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 0、学完本文你或许可以收获 感受一个树工具从初始逐步优化完善的过程 树工具封装的设计思考与实现思路 最后收获一款拿来即用的树工具源代码 对于前端树组件有一定了解和使用过的同学可直接跳跃到第3章节开始。 1、树长什么样 ? 前端的树组件大多数情况下出现在后端的管理系统中,比如我们常见的菜单树...

weixin_41663412的博客 185

【项目实战】自动化测试软件VectorCAST介绍

VectorCAST是一款先进的自动化测试软件。VectorCAST是一款功能强大、易于使用的自动化测试软件。VectorCAST适用于各种嵌入式系统的测试。VectorCAST为嵌入式系统的测试提供了一种高效、可靠的解决方案。VectorCAST提供了一整套完整的测试工具,包括测试管理、代码覆盖、缺陷定位、报告生成等,以帮助开发人员提高测试效率,确保软件质量。VectorCAST支持。

奶爸的编程之路,也就一周冷个三天 2008

java 树型分类查询_java树形结构工具类(查询省市区树形结构数据等多级联级数据)...

{"code": 1,"msg": "success","sign": null,"data": [{"id": "120000","pId": "","child": [{"id": "120100","pId": "120000","child": [{"id": "120101","pId": "120100","child": null,"addressName": "和平区","addr...

weixin_30750685的博客 629

DeerFlow 系列教程 第十八篇 | 实战案例三——用 DeerFlow 构建自定义 AI 工作流

在实际业务中,许多复杂的内容生产任务不是单一技能就能覆盖的。需要先调研某个主题的最新信息基于调研结果撰写结构化的文章或报告对报告中的数据进行可视化处理最终输出符合品牌风格的排版文档或演示文稿这些环节涉及不同的领域知识和工具链,单个内置技能无法完全覆盖。组合自定义技能、MCP 外部工具和多 Agent 协作,构建端到端的工作流。传统手工流程: DeerFlow 自定义工作流:搜索资料、阅读文献 用户描述需求│ │▼ ▼。

weixin_43674738的博客 204

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Java使用泛型递归构建树

定义一个树实体 @Data public class Tree<T> { /** * 节点ID */ private String id; /** * 节点的子节点 */ private List<Tree<T>> children = new ArrayList<>(); /** * 父ID */ private String parentId;

T_yuqing的博客 895

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

一、Collection下List和Set集合的遍历二、常见数据结构三、泛型、可变参数四、Collections工具类

2022.8.10

weixin_60166864的博客 136

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

突破CRUD | 万能树工具类封装

个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 0、学完本文你或许可以收获 感受一个树工具从初始逐步优化完善的过程 树工具封装的设计思考与实现思路 最后收获一款拿来即用的树工具源代码 对于前端树组件有一定了解和使用过的同学可直接跳跃到第3章节开始。 1、树长什么样 ? 前端的树组件大多数情况下出现在后端的管理系统中,比如我们常见的菜单树...

jishulaozhuanjia的博客 146

java树泛型工具类

JAVA构建树形结构通用工具类 场景说明 案例中的方法说明 构建思路实现 第一步:构建接口TreeFeature 第二步:让需要构建树形结构的类实现该接口并实现方法 第三部创建通用的TreeUtil工具类 到这位置,TreeUtil已经完成来测试,先在实体类中添加点测试数据 编写测试类 输出结果 当有一个新的需要构建树形结构的实体时,只需要实现TreeFeature接口并重写好其中的方法,调用TreeUtil .build即可 场景说明 在日常java开发过程中,经常遇到要把一个扁平结构的数据,处理成为树形

weixin_42895341的博客 397

sqlite工具类 java_Java之泛型、集合工具类

集合工具类在我们讲完常用的基本集合后,我们就要介绍下位于java.util包下的collections类,注意:我们之前的collection是集合的接口,而collections是一个类。collections里面的方法也都是静态的,所以可以说是集合的工具类。接下来还是看几个常用的方法:sort方法可以对List集合进行一个排序。(排序前提是类实现了comparable的接口,或者方法...

weixin_39640008的博客 184

【Java数据结构】树

java集合框架:树

2303_77535762的博客 1987

Java集合框架概述(二)——泛型集合与Collections工具类

java集合框架概述(一)——List接口的那些事 前景回顾  这是一个关于ArrayList的类,不难发现,集合里面存储了五种不同的类型,显然这是没有任何的规范,导致集合里可以添加任意类型的对象。因此,在打印doublr类型的时候会报错。 public class TestArrayList { public static void main(String[] args){ ...

LukeyAlvin的博客 2015

HashSet、TreeSet、Collections工具类、泛型

泛型的名称可以使用任何单词、字母等(但比较推荐使用公认的含义的一些大写字母)例如:K(Key,键)、V(Value,值)、T(Type,类型)、E(Element,元素)、R(Return,返回值)、P(Parameter,参数)、N(Number,数值)。泛型没有类型提升;泛型是统一固定数据类型的。extends 父类):表示泛型可以是父类,也可以是父类的任何子类类型,也给父类设置上限;super 子类):表示泛型可以是子类,也可以是任何子类的父类类型,也给子类类设置下限;

2401_89004553的博客 963

Java树形结构之泛型

先编写接收数据的泛型实体类 import java.io.Serializable; import java.util.ArrayList; import java.util.List; public class TreeBo<T> implements Serializable{ /** * */ private static final long seria...

qq_38833585的博客 1379

【RuoYi自定义树工具类】生成树、获取指定节点树、获取树列表

通过提取若依的部门树生成代码整合而成的工具类,并添加自定义的子树查询功能。如果项目中用到的树结构超过两个,可以使用此工具类。不用每次都cv大量代码,并且更好维护。

enkidu66的博客 3813

java从0的二倍速学习系列——泛型,Collections工具类,Arrays工具类

java从0的二倍速学习系列——泛型1. 一个集合的问题2. 集合泛型的使用3. 泛型的擦除3. 泛型类的使用3.1 泛型类的泛型方法3.2 泛型中的静态方法 1. 一个集合的问题 同时存在 list.add("str1") list.add(123) 的情况下,无法很好的分辨存储的数据类型,导致后序List调用出错。 因为collection默认存储Object类型数据,所以编译过程中不会报错。 所以我们希望在创建集合时,就明确类型。 List<String> li = new Arraty

qq_42918142的博客 213
上一篇: springboot 打包可依赖的jar
下一篇: java 异步线程池
Trank-Lw
博客等级 码龄9年 103粉丝 96原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值