使用hutool工具生成树形结构

这篇具有很好参考价值的文章主要介绍了使用hutool工具生成树形结构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

假设要构建一个菜单,可以实现智慧库房,菜单的样子如下:

智慧库房
    |- RFID
    |- 智慧大屏
    |- 智能密集架
    |- 环境管控

那这种结构如何保存在数据库中呢?一般是这样的:

​ 每条数据根据parentId相互关联并表示层级关系,parentId在这里也叫外键

id parentId name
1 0 智慧库房
2 1 RFID
3 1 智慧大屏
4 1 智能密集架
5 1 环境管控

使用步骤:

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.16</version>
</dependency>

我这里使用的是枚举:(大家可以使用数据将需要封装成树形结构的数据,查询封装成一个List)

package com.hy.archive.supervision.enums;

/**
 * @description: 智慧库房功能
 */

public enum SmartWarehouseFunctionEnum {

    SMART_WAREHOUSE("1", "智慧库房", "0"),
    RFID("2", "RFID", "1"),
    SMART_LARGE_SCREEN("3", "智慧大屏", "1"),
    INTELLIGENT_DENSE_RACK("4", "智能密集架", "1"),
    ENVIRONMENTAL_CONTROL("5", "环境管控", "1");


    private String id;
    private String name;
    private String pid;


    SmartWarehouseFunctionEnum(String id, String name, String pid) {
        this.id = id;
        this.name = name;
        this.pid = pid;
    }

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getPid() {
        return pid;
    }


    public static SmartWarehouseFunctionEnum fromCode(String id) {
        for (SmartWarehouseFunctionEnum DispatchTypeEnum : SmartWarehouseFunctionEnum.values()) {
            if (DispatchTypeEnum.getId().equals(id)) {
                return DispatchTypeEnum;
            }
        }
        return null;
    }
}

package com.js.hutool.controller;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.lang.tree.TreeNode;
import cn.hutool.core.lang.tree.TreeNodeConfig;
import cn.hutool.core.lang.tree.TreeUtil;
import com.js.hutool.enums.SmartWarehouseFunctionEnum;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.List;

@RestController
@RequestMapping("/frid")
public class FridFunctionController {

    /**
     * @description: 使用htool工具生成树形递归结构
     * @author: js
     * @date: 2023/8/4 15:36
     * @param:
     * @return:
     **/
    @GetMapping("/function")
    public List<Tree<String>> obtainAllFunctionsOfTheSmartWarehouse() {
        List<TreeNode> nodeList = CollUtil.newArrayList();
        int i=0;
        for (SmartWarehouseFunctionEnum value : SmartWarehouseFunctionEnum.values()) {
            
            
            //1.将数据库中的数据一次性查询出来封装到List中
            //2.在这里将从数据库查询的所有数据List中id,pid(父级id),name 依次次封装到longTreeNode中
           
            
            TreeNode<String> longTreeNode = new TreeNode<>(value.getId(), value.getPid(), value.getName(), 0);
            // 如果还需要给树形添加其他字段,返回给前端,需使用map进行封装
            HashMap<String, Object> hashMap = new HashMap<>();
            hashMap.put("返回给前端的字段1", i++);// 返回给前端的字段:open_function
            hashMap.put("返回给前端的字段2",i+1);
            longTreeNode.setExtra(hashMap);
            nodeList.add(longTreeNode);
        }


        //配置
        TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
// 自定义属性名 都要默认值的
        //设置权重对应的名称
        treeNodeConfig.setWeightKey("order");
        //设置ID对应的名称
        treeNodeConfig.setIdKey("id");//如果返回给前端的id不叫id,可以修改这里的值
// 最大递归深度
        treeNodeConfig.setDeep(3);//这个是设置树形结构的层级

//转换器 (含义:找出父节点为字符串零的所有子节点, 并递归查找对应的子节点, 深度最多为 3)
        											     // 0表示最顶层的id是0,即最高的父级id为多少
        List<Tree<String>> build = TreeUtil.<TreeNode, String>build(nodeList, "0", treeNodeConfig,
                (treeNode, tree) -> {
                    tree.setId((String) treeNode.getId());
                    tree.setParentId((String) treeNode.getParentId());
                    tree.setName(treeNode.getName());

                    //这里的putAll与put的区别:put将之前需要给前端的其他字段封装成Map,进行多嵌套了一成
                    tree.putAll(treeNode.getExtra());
                    //tree.put("open_function",treeNode.getExtra());
                });

        return build;


    }


}

使用hutool工具生成树形结构,SpringBoot,java

使用hutool工具生成树形结构,SpringBoot,java

使用hutool工具生成树形结构,SpringBoot,java文章来源地址https://www.toymoban.com/news/detail-629454.html

到了这里,关于使用hutool工具生成树形结构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java 使用hutool工具进行MD5加密

    引入依赖 MD5加密

    2024年02月16日
    浏览(30)
  • Java 使用hutool工具进行导出导入excel表格(代码很简单)

    创建一个Controller进行测试 

    2024年02月07日
    浏览(54)
  • Java中操作Xml使用备忘[ Hutool工具类XmlUtil、XStream ]

    List item 1. Hutool中XmlUtil的使用简介 2. Hutool中XmlUtil快速读取Xml字符串某个节点值 [简单取值时,推荐使用] 2-1 Hutool工具包Maven依赖和测试Xml字符串如下 2-2 读取Xml中的节点的值 3. Hutool中XmlUtil详细操作示例 3-1 Xml示例字符串如下 3-2 查询标签内的属性 3-3 查询一对标签中的文本 3-

    2024年02月06日
    浏览(31)
  • java使用hutool工具类发送http或者https请求太香啦

    我们使用java内置的http工具实现远程调用的时候,都是用try catch包一堆代码,巨难受,今天看见有人使用hutool工具类那是天简单了呀,具体操作如下: 1,引入依赖 2, 如果不需要设置其他什么头信息,代码: 如果是https请求直接换url里面的http就行 返回信息格式: {\\\"code\\\":200

    2024年02月14日
    浏览(27)
  • 封装hutool工具生成JWT token

    这一步非常重要,否则部署项目会发生JCE cannot authenticate the provider BC BouncyCastle类是一个加密的第三方类,关闭它使用jdk自带的加密算法 GlobalBouncyCastleProvider.setUseBouncyCastle(false);

    2024年02月15日
    浏览(62)
  • Java RSA加解密-非对称加密-公钥私钥加解密(使用hutool工具)

    之前一篇帖子(https://blog.csdn.net/u014137486/article/details/136413532)展示了使用原生Java进行RSA加解密,本文介绍下使用当下流行的Hutool工具进行RSA加解密的用法。 目录 一、在Linux环境下生成公钥、私钥文件 二、将生成的公私钥文件导入项目中并移除pem文件的前后公私钥标记 三、po

    2024年04月23日
    浏览(42)
  • 【Java-Util】Hutool工具类判断字符串、对象为空的使用

    判断字符串、包装类、集合、对象是否为空。 字符串工具-StrUtil (hutool.cn) str1为null,str2是字符串,str3为空字符串,str4是包含不可见字符(空格等)的字符串。 使用 StrUtil.isEmpty(str) 和 StrUtil.isBlank(str) 总结: isBlank与 isEmpty(CharSequence) 的区别是: isBlank方法会校验空白字符,且

    2024年02月02日
    浏览(100)
  • Mac 快速生成树形项目结构目录

    我这里使用的是通过包管理 Homebrew 安装形式。没有安装的话可以自行搜索 Homebrew 安装方式 直接到项目的根目录执行 tree 命令 效果如下: or : 效果如下:

    2024年02月15日
    浏览(42)
  • Java:Hutool工具箱之Hutool-crypto加密解密

    文档 https://hutool.cn/docs/#/crypto/概述 重点单词: 摘自文档 依赖 以MD5 为例 以AES 加密为例 这里有个问题,如果秘钥长度不够16位,会报错 长度只能是16位,24位,32位 参考 https://toscode.gitee.com/dromara/hutool/issues/I4O1EB 以RSA为例

    2024年02月16日
    浏览(58)
  • 干掉复杂的Java工具类,Hutool 工具库确实香~

    Hutool 大家已经比较熟悉了,这是一个超全的 Java 工具库,深受国内开发者的喜爱。 我之前其实是不太喜欢使用这种功能太多的工具类的,也比较担心稳定性和安全性,后面慢慢接受了就感觉其实也还好。而且,我们还可以按需只引入自己需要的功能模块,相对也比较灵活。

    2024年02月03日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包