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

hutool常用方法

1、树结构工具-TreeUtil

构建Tree示例

package com.sl.transport.common.util;import cn.hutool.core.bean.BeanUtil;
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 cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;import java.util.List;@Slf4j
class TreeUtilTest {@Testvoid treeTest() {// 构建node列表List<TreeNode<String>> nodeList = CollUtil.newArrayList();nodeList.add(new TreeNode<>("1", "0", "系统管理", 5));nodeList.add(new TreeNode<>("11", "1", "用户管理", 222222));nodeList.add(new TreeNode<>("111", "11", "用户添加", 0));nodeList.add(new TreeNode<>("2", "0", "店铺管理", 1));nodeList.add(new TreeNode<>("21", "2", "商品管理", 44));nodeList.add(new TreeNode<>("221", "2", "添加商品", 2));//配置TreeNodeConfig treeNodeConfig = new TreeNodeConfig();// 自定义属性名 都要默认值的treeNodeConfig.setWeightKey("weight");treeNodeConfig.setIdKey("id");// 最大递归深度treeNodeConfig.setDeep(3);//构造树结构List<Tree<String>> treeNodes = TreeUtil.build(nodeList, "0",(treeNode, tree) -> {tree.setId(treeNode.getId());tree.setParentId(treeNode.getParentId());tree.putAll(BeanUtil.beanToMap(treeNode));tree.remove("bid");});log.info("treeNodes {}", JSONUtil.toJsonStr(treeNodes));}
}

输出结果

[{"id": "2","parentId": "0","name": "店铺管理","weight": 1,"children": [{"id": "221","parentId": "2","name": "添加商品","weight": 2}, {"id": "21","parentId": "2","name": "商品管理","weight": 44}]
}, {"id": "1","parentId": "0","name": "系统管理","weight": 5,"children": [{"id": "11","parentId": "1","name": "用户管理","weight": 222222,"children": [{"id": "111","parentId": "11","name": "用户添加","weight": 0}]}]
}]

2、Bean工具-BeanUtil

对象转Bean

@Slf4j
public class BeanUtilTest {@Getter@Setterpublic static class SubPerson extends Person {public static final String SUBNAME = "TEST";private UUID id;private String subName;private Boolean slow;private LocalDateTime date;private LocalDate date2;}@Getter@Setterpublic static class Person {private String name;private int age;private String openid;}/*** 对象转Bean*/@Testpublic void toBeanTest() {SubPerson person = new SubPerson();person.setAge(14);person.setOpenid("11213232");person.setName("测试A11");person.setSubName("sub名字");Map<?, ?> map = BeanUtil.toBean(person, Map.class);Assert.assertEquals("测试A11", map.get("name"));Assert.assertEquals(14, map.get("age"));Assert.assertEquals("11213232", map.get("openid"));// static属性应被忽略log.info("map是否包含名为SUBNAME的key {}", map.containsKey("SUBNAME"));}
}

输出结果

map是否包含名为SUBNAME的key false

3、验证码工具-CaptchaUtil

生成验证码

package com.sl.transport.common.util;import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.LineCaptcha;
import lombok.extern.slf4j.Slf4j;
import org.junit.Assert;
import org.junit.Test;/**
* 直线干扰验证码单元测试
*
* @author looly
*/
@Slf4j
public class CaptchaTest {/*** 生成验证码*/@Testpublic void lineCaptchaTest1() {// 定义图形验证码的长和宽LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(200, 100);Assert.assertNotNull(lineCaptcha.getCode());log.info("直线干扰验证码: {}", lineCaptcha.getCode());log.info("直线干扰验证码验证结果: {}",lineCaptcha.verify(lineCaptcha.getCode()));}
}

输出结果

直线干扰验证码: 5ku0o
直线干扰验证码验证结果: true

4、类型转换工具类-Convert

转换值为指定类型

/**
* 转换值为指定类型
*/
@Test
public void toObjectTest() {final Object result = Convert.convert(Object.class, "aaaa");log.info(result + "");
}

输出结果

aaaa

5、对象工具-ObjectUtil

对象相等

/**
* 比较两个对象是否相等
*/
@Test
public void equalsTest() {Object a = null;Object b = null;log.info("是否相等:{}" , ObjectUtil.equals(a, b));
}

输出结果

是否相等:true

6、数字工具-NumberUtil

加法运算

/**
* 提供精确的加法运算
*/
@Test
public void addTest() {final Float a = 3.15f;final Double b = 4.22;final double result = NumberUtil.add(a, b).doubleValue();log.info(result + "");
}

输出结果

7.37

7、日期时间工具-DateUtil

当前时间

/**
* 当前时间
*/
@Test
public void nowTest() {// 当前时间final Date date = DateUtil.date();Assert.assertNotNull(date);// 当前时间final Date date2 = DateUtil.date(Calendar.getInstance());Assert.assertNotNull(date2);// 当前时间final Date date3 = DateUtil.date(System.currentTimeMillis());Assert.assertNotNull(date3);// 当前日期字符串,格式:yyyy-MM-dd HH:mm:ssfinal String now = DateUtil.now();Assert.assertNotNull(now);// 当前日期字符串,格式:yyyy-MM-ddfinal String today = DateUtil.today();log.info(today);
}

输出结果

2023-03-10

8、集合工具-CollUtil

自定义函数判断集合是否包含某类值

/**
* 自定义函数判断集合是否包含某类值
*/
@Test
public void testPredicateContains() {final ArrayList<String> list = CollUtil.newArrayList("bbbbb", "aaaaa", "ccccc");log.info( "" + CollUtil.contains(list, s -> s.startsWith("a")));log.info( "" + CollUtil.contains(list, s -> s.startsWith("d")));
}

输出结果

true
false

9、集合串行流工具-CollStreamUtil

将Collection转化为map

/**
* 将Collection转化为map(value类型与collection的泛型不同)
*/
@Test
public void testToMap() {Map<Long, String> map = CollStreamUtil.toMap(null, Student::getStudentId, Student::getName);Assert.assertEquals(map, Collections.EMPTY_MAP);List<Student> list = new ArrayList<>();map = CollStreamUtil.toMap(list, Student::getStudentId, Student::getName);Assert.assertEquals(map, Collections.EMPTY_MAP);list.add(new Student(1, 1, 1, "张三"));list.add(new Student(1, 1, 2, "李四"));list.add(new Student(1, 1, 3, "王五"));map = CollStreamUtil.toMap(list, Student::getStudentId, Student::getName);Assert.assertEquals(map.get(1L), "张三");Assert.assertEquals(map.get(2L), "李四");Assert.assertEquals(map.get(3L), "王五");Assert.assertNull(map.get(4L));// 测试value为空时list.add(new Student(1, 1, 4, null));map = CollStreamUtil.toMap(list, Student::getStudentId, Student::getName);log.info(map.get(4L));
}

输出结果

null

10、JSON工具-JSONUtil

JSON字符串转JSONObject对象

/**
* JSON字符串转JSONObject对象
*/
@Test
public void toJsonStrTest2() {final Map<String, Object> model = new HashMap<>();model.put("mobile", "17610836523");model.put("type", 1);final Map<String, Object> data = new HashMap<>();data.put("model", model);data.put("model2", model);final JSONObject jsonObject = JSONUtil.parseObj(data);log.info("是否相等{}", ObjectUtil.equals( "17610836523", jsonObject.getJSONObject("model").getStr("mobile")));
}

输出结果

是否相等true

11、唯一ID工具-IdUtil

获取随机UUID

/**
*获取随机UUID
*/
@Test
public void randomUUIDTest() {String randomUUID = IdUtil.randomUUID();log.info(randomUUID);
}

输出结果

e514518b-21d7-4918-9b34-792b21b0b64f

12、枚举工具-EnumUtil

枚举类中所有枚举对象的name列表

public enum TestEnum{TEST1("type1"), TEST2("type2"), TEST3("type3");TestEnum(String type) {this.type = type;}private final String type;@SuppressWarnings("unused")private String name;public String getType() {return this.type;}public String getName() {return this.name;}
}/**
* 枚举类中所有枚举对象的name列表
*/
@Test
public void getNamesTest() {List<String> names = EnumUtil.getNames(TestEnum.class);boolean equalList = CollUtil.isEqualList(CollUtil.newArrayList("TEST1", "TEST2", "TEST3"), names);log.info(equalList + "");
}

输出结果

true

13、HTTP客户端(Hutool-http)

  • 本质上,HttpUtil中的get和post工具方法都是HttpRequest对象的封装,因此如果想更加灵活操作Http请求,可以使用HttpRequest。

  • HttpResponse是HttpRequest执行execute()方法后返回的一个对象,我们可以通过此对象获取服务端返回的:

    • Http状态码(getStatus方法)
    • 返回内容编码(contentEncoding方法)
    • 是否Gzip内容(isGzip方法)
    • 返回内容(body、bodyBytes、bodyStream方法)
    • 响应头信息(header方法)
// 发送HTTP POST请求,并记录响应结果
HttpResponse httpResponse =HttpRequest.post(Constast.JR_DEPT_URL) // 发送POST请求到指定URL.header("grantType", Constast.GRANT_TYPE_SIGN) // 设置请求头.contentType("application/json") // 设置内容类型为JSON.body(JSON.toJSONString(requestParam, filter)) // 将请求参数对象转换为JSON字符串并设置为请求体.timeout(5000) // 设置请求超时时间为5000毫秒.execute(); // 执行请求// 如果请求成功
if (httpResponse.getStatus() == HttpStatus.HTTP_OK) {// 同步成功,后续操作
}

相关文章:

hutool常用方法

1、树结构工具-TreeUtil 构建Tree示例 package com.sl.transport.common.util;import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.tree.Tree; import cn.hutool.core.lang.tree.TreeNode; import cn.hutool.core…...

CloudSat数据产品数据下载与处理 (matlab)

CloudSat数据下载 这个数据我之前和CALIPSO弄混了&#xff0c;后来发现它们虽然是同一个火箭上去&#xff0c;但是数据产品却在不同的平台下&#xff0c;CloudSat的数据更加关注云的特性&#xff0c;包括云覆盖、云水当量、云分类数据。 数据网址在&#xff1a;CloudSat网址 …...

LDR6500 一拖三快充线的定义与特点

定义&#xff1a;LDR6500 一拖三快充线是一种具有 Type-C 接口的充电线&#xff0c;它的最大特点是可以同时连接三个设备进行快速充电。 特点&#xff1a; 高效充电&#xff1a;采用先进的快充技术&#xff0c;能够快速为设备充电&#xff0c;大大缩短充电时间。同时&#xf…...

Elasticsearch安装使用

ES 概述 Elasticsearch&#xff0c;简称为 ES&#xff0c;是一款非常强大的开源的高扩展的分布式全文检索引擎&#xff0c;可以帮助我们从海量数据中快速找到需要的内容,它可以近乎实时的存储、检索数据.还可以可以实现日志统计、分析、系统监控等功能. 官网:https://www.elast…...

计算机网络的主要知识点小结

计算机网络是指将多台计算机通过通信线路连接起来&#xff0c;实现资源共享和信息传递的系统。 一、计算机网络概述 1. 定义和功能 - 定义&#xff1a;计算机网络是将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操…...

fastjson/jackson对getter,setter和constructor的区分

在复现完fastjson1.2.24-1.2.80和jackson的所有相关漏洞后&#xff0c;总结的一些规则 以下均指对json的反序列化过程 setter fastjson调用setter&#xff1a;遍历所有方法&#xff0c;找出所有满足setter要求的方法&#xff0c;再根据传入的json去反射调用 jackson调用set…...

认识CSS语法

CSS&#xff08;网页美容&#xff09; 重点&#xff1a;选择器、盒子模型、浮动、定位、动画&#xff0c;伸缩布局 Css的作用&#xff1a; 美化网页&#xff1a;CSS控制标签的样式 网页布局&#xff1a;CSS控制标签的位置 概念&#xff1a;层叠样式表&#xff08;级联样式表…...

Linux运维篇-ansible的使用

目录 ansible简介ansible架构1、连接插件2、核心模块3、自定义模块4、插件5、剧本6、主机清单 ansible的执行过程安装Ansibleansible的使用ansible.cfg文件修改添加主机清单方式一方式二方式三 测试主机清单连接 ansible简介 简单来说&#xff0c;ansible就是一个自动化运维工…...

【MySQL】日志

1. 日志基本了解 常见的MySQL Server日志类型&#xff0c;以及记录的日志信息&#xff08;场景通俗理解&#xff09; 错误日志 记录的主要信息由服务器关闭、启动、崩溃事件&#xff1b;MySQL运行过程中出现的错误、警告和严重事件以及与权限、配置相关的问题使用场景 诊断MyS…...

2024年CentOS镜像下载地址,包括CentOS官网、国内镜像下载,超详细也

这里给大家提供了4种镜像下载地址&#xff0c;包括CentOS官方镜像下载、阿里云开源镜像站下载、网易开源镜像下载搜狐开源镜像下载。 1.CentOS官网镜像下载 因为服务器在国外所以打开CentOS官方网站的时候可能会比较慢。大家可以选择后面几种国内镜像下载方式。 1.1进入CentO…...

STL学习-顺序容器-array数组

array模板类是C11引入。它是有着固定大小用于保存一系列同类型元素的顺序容容器&#xff0c;因此不能对它进行增加或者删除,只能使用或者替换它的元素值。 1.定义及初始化 array定义对象时,需要传入类型和大小,且大小不能修改。array是唯--个如果不初始化,它的初始化是不明确…...

Spring Boot框架下的酒店住宿登记系统

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…...

electron展示下载进度条

我们使用electron下载文件时&#xff0c;会发现不像浏览器一样会有地方展示下载进度&#xff0c;这导致下载一些大文件时不知道下载进度到哪里了 下面我们通过electron提供的will-download监听和element-plus中的ElNotification和ElProgress组件实现这一功能 实现逻辑 触发…...

Spark 基础操作

Spark 操作 创建操作(Creation Operation) 用于RDD创建工作。RDD创建只有两种方法&#xff0c;一种是来自于内存集合和外部存储系统&#xff0c;另一种是通过转换操作生成的RDD 转换操作(Transformation Operation) 将RDD通过一定的操作变成新的RDD&#xff0c;比如HadoopR…...

VoLTE 微案例:VoLTE 注册失败,I-CSCF 返回 403,HSS(UAR) 返回 5001

目录 1. 问题描述 2. 故障注册流程与正常流程对照 3. 结论 博主wx:yuanlai45_csdn 博主qq:2777137742 想要 深入学习 5GC IMS 等通信知识(加入 51学通信),或者想要 cpp 方向修改简历,模拟面试,学习指导都可以添加博主低价指导哈。 1. 问题描述...

智能财务 | 数据与融合,激发企业财务数智化转型思考

数据与融合&#xff0c;激发企业财务数智化转型思考 用友持续深耕企业财务领域&#xff0c;见证中国企业走过了财务电算化、信息化时代&#xff0c;当下共同经历数智化时代。2023 年度&#xff0c;通过走访标杆企业&#xff0c;与高校教授、权威机构学者共同探讨等形式&#xf…...

docker 下载netcore 镜像

dotnet-docker/README.runtime.md at main dotnet/dotnet-docker GitHub docker pull mcr.microsoft.com/dotnet/runtime:8.0 docker pull mcr.microsoft.com/dotnet/runtime:3.1...

Ajax:请求 响应

Ajax&#xff1a;请求 & 响应 AjaxjQuery的Ajax接口$.get$.post$.ajax PostMan 接口测试getpost Ajax 浏览器中看到的数据&#xff0c;并不是保存在浏览器本地的&#xff0c;而是实时向服务器进行请求的。当服务器接收到请求&#xff0c;就会发回一个响应&#xff0c;此时浏…...

WebForms DataList 控件深入解析

WebForms DataList 控件深入解析 概述 在 ASP.NET WebForms 的众多服务器控件中&#xff0c;DataList 控件是一个功能强大的数据绑定控件&#xff0c;它允许开发者以表格形式展示和操作数据。DataList 控件类似于 Repeater 控件&#xff0c;但提供了更多的内置布局和样式选项…...

【有啥问啥】DINO:一种改进的去噪锚框的端到端目标检测器

DINO&#xff1a;一种改进的去噪锚框的端到端目标检测器 在目标检测领域&#xff0c;DINO&#xff08;DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection&#xff09;是一种创新的端到端目标检测模型&#xff0c;旨在解决传统目标检测算法中的一些关…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...