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) {// 同步成功,后续操作
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/456934.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】控制台学生成绩管理系统

文章目录 C语言编程&#xff1a;学生成绩管理系统一、程序概述二、代码实现三、程序解释 C语言编程&#xff1a;学生成绩管理系统 在这篇文章中&#xff0c;我们将一起探讨如何使用C语言来创建一个简单的学生成绩管理系统。这个系统将允许用户输入学生数量、学号和成绩&#x…

钉钉录播抓取视频

爬取钉钉视频 免责声明 此脚本仅供学习参考&#xff0c;切勿违法使用下载他人资源进行售卖&#xff0c;本人不但任何责任! 仓库地址: GItee 源码仓库 执行顺序 poxyM3u8开启代理getM3u8url用于获取m3u8文件userAgent随机请求头downVideo|downVideoThreadTqdm单线程下载和…

水轮发电机油压自动化控制系统解决方案介绍

在现代水电工程中&#xff0c;水轮机组油压自动化控制系统&#xff0c;不仅直接关系到水轮发电机组的安全稳定运行&#xff0c;还影响着整个水电站的生产效率和经济效益。 一、系统概述 国科JSF油压自动控制系统&#xff0c;适用于水轮发电机组调速器油压及主阀&#xff08;蝶…

Golang | Leetcode Golang题解之第503题下一个更大元素II

题目&#xff1a; 题解&#xff1a; func nextGreaterElements(nums []int) []int {n : len(nums)ans : make([]int, n)for i : range ans {ans[i] -1}stack : []int{}for i : 0; i < n*2-1; i {for len(stack) > 0 && nums[stack[len(stack)-1]] < nums[i%…

01 springboot-整合日志(logback-config.xml)

logback-config.xml 是一个用于配置 Logback 日志框架的 XML 文件&#xff0c;通常位于项目的 classpath 下的根目录或者 src/main/resources 目录下。 Logback 提供了丰富的配置选项&#xff0c;可以满足各种不同的日志需求。需要根据具体情况进行配置。 项目创建&#xff0…

Nginx、Tomcat等项目部署问题及解决方案详解

目录 前言1. Nginx部署后未按预期显示结果1.1 查看Nginx的启动情况1.2 解决启动失败的常见原因 2. 端口开启问题2.1 Windows环境下的端口开放2.2 Linux环境下的端口开放 3. 重视日志分析3.1 Nginx日志分析3.2 Tomcat日志分析 4. 开发环境与部署后运行结果不同4.1 开发环境与生产…

redis的配置文件解析

我的后端学习大纲 我的Redis学习大纲 1.1.Redis的配置文件&#xff1a; 1.Redis的配置文件名称是&#xff1a;redis.conf 2.在vim这个配置文件的时候&#xff0c;默认是不显示行号的&#xff0c;可以编辑下面这个文件&#xff0c;末尾加上set nu&#xff0c;就会显示行号: 1.…

kafka 如何减少数据丢失?

大家好&#xff0c;我是锋哥。今天分享关于【kafka 如何减少数据丢失?】面试题&#xff1f;希望对大家有帮助&#xff1b; kafka 如何减少数据丢失? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Apache Kafka 是一个高吞吐量的分布式消息队列&#xff0c;广泛用…

初探Vue前端框架

文章目录 简介什么是Vue概述优势MVVM框架 Vue的特性数据驱动视图双向数据绑定指令插件 Vue的版本版本概述新版本Vue 3Vue 3新特性UI组件库UI组件库概述常用UI组件库 安装Vue安装Vue查看Vue版本 实例利用Vue命令创建Vue项目切换工作目录安装vue-cli脚手架创建Vue项目启动Vue项目…

Java应用程序的测试覆盖率之设计与实现(三)-- jacoco cli 客户端

一、背景 上文已把覆盖率数据采集好了,并提供远程连接的tcp地址及端口。 jacoco cli文档jacoco cli jar包jacococli.jar 我下载好了,放在github工程里。 本文主要是介绍如何使用jacoco cli 客户端读取并生成覆盖率报告。 二、使用 1、dump覆盖率统计 java -jar doc/jacoc…

提升数据处理效率:TDengine S3 的最佳实践与应用

在当今数据驱动的时代&#xff0c;如何高效地存储与处理海量数据成为了企业面临的一大挑战。为了解决这一问题&#xff0c;我们在 TDengine 3.2.2.0 首次发布了企业级功能 S3 存储。这一功能经历多个版本的迭代与完善后&#xff0c;逐渐发展成为一个全面和高效的解决方案。 S3…

vue计算属性报错:Computed property “energyTotal“ was assigned to but it has no setter.

我页面中的应用 <el-input-number v-model"energyTotal" placeholder"请输入" disabled class"" :precision"2" :max"100000000" :controls"false"></el-input-number>computed:{carbonTotal(){/*…

ubuntu20.04上使用 Verdaccio 搭建 npm 私有仓库

安装nvm 首先安装必要的工具&#xff1a; apt update apt install curl下载并执行nvm安装脚本&#xff1a; curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash添加环境变量&#xff08;如果安装脚本没有自动添加&#xff09;。编辑 ~/.bash…

Python爬虫教程:从入门到精通

Python爬虫教程&#xff1a;从入门到精通 前言 在信息爆炸的时代&#xff0c;数据是最宝贵的资源之一。Python作为一种简洁而强大的编程语言&#xff0c;因其丰富的库和框架&#xff0c;成为了数据爬取的首选工具。本文将带您深入了解Python爬虫的基本概念、实用技巧以及应用…

【Qt聊天室客户端】聊天界面功能

1. 发送消息 1.1 实现逻辑分析 发送消息的具体实现&#xff0c;通过输入框右下角的发送按钮输入框中发送的内容&#xff0c;通过网络传输给服务器客户端&#xff0c;发送消息成功后&#xff0c;消息展示区中要显示刚刚发送出去的消息 1.2 具体实现 消息输入区域设置信号槽处…

Cout输出应用举例

Cout输出应用 在main.cpp里输入程序如下&#xff1a; #include <iostream> //使能cin(),cout(); #include <stdlib.h> //使能exit(); #include <sstream> #include <iomanip> //使能setbase(),setfill(),setw(),setprecision(),setiosflags()和res…

Unity2D 人物爬楼梯

unity3d 中 实现 2d角色爬梯子功能。_哔哩哔哩_bilibiliunity3d 中 实现 2d角色爬梯子功能。, 视频播放量 2598、弹幕量 3、点赞数 28、投硬币枚数 18、收藏人数 83、转发人数 19, 视频作者 Fss1975, 作者简介 &#xff0c;相关视频&#xff1a;寻路算法 在unity3d 中的演示&am…

05方差分析续

文章目录 1.Three way ANOVA2.Latin square design2.Hierarchical (nested) ANOVA3.Split-plot ANOVA4.Repeated measures ANOVA5.Mixed effect models 1.Three way ANOVA 三因素相关分析 单因子分析的代码 data(mtcars) nrow(mtcars) # 32 mtcars$cyl as.factor(mtcars$cyl…

【永中软件-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

spring整合使用xml方式整合Druid数据源连接池

1.普通的JDBC数据库连接使用 DriverManager 来获取&#xff0c;每次向数据库建立连接的时候都要将 Connection加载到内存中&#xff0c;再验证用户名和密码(得花费0.05s&#xff5e;1s的时间)。需要数据库连接的时候&#xff0c;就向数据库要求 一个&#xff0c;执行完成后再断…