hutool使用手册

工具篇之Hutool Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。Hutool中的工具方法来自于每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。 阅读详情

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 {

    @Test
    void 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
    @Setter
    public 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
    @Setter
    public static class Person {
        private String name;
        private int age;
        private String openid;
    }
    
    /**
    * 对象转Bean
    */
    @Test
    public 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 {

    /**
    * 生成验证码
    */
    @Test
    public 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:ss
    final String now = DateUtil.now();
    Assert.assertNotNull(now);
    // 当前日期字符串,格式:yyyy-MM-dd
    final 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

Hutool ——Java工具类库 当然这个模块的存在一直有争议,因为真正的bom包是一个模块管理包,正确的打开方式是可以引入,再引入需要的模块(只是不用重复版本号而已),Hutool中"排除"方式就变得非常异类,真是让人头大。Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;Hutool的目标是使用一个工具方法代替一段复杂代码,从而最大限度的避免“复制粘贴”代码的问题,彻底改变我们写代码的方式。//告诉浏览器输出内容为图片。 阅读详情

相关推荐

不会吧?现在还有人不知道 Hutool 吗?一起看看 Hutool 源码

前言: 本文是死磕 Hutool 源码系列开篇, 主要叙述一下为什么要阅读 Hutool源码,以及阅读 Hutool源码都有哪些好处。不知道什么是 Hutool?或者说看到「源码」两个字之后你“抖一抖” 内容有点长!需要点耐心哦! 这里还整理了今年面试的各种总结:包含了:spring、并发、数据库、Redis、分布式、dubbo、JVM、微服务等方面总结,下图是部分截图,需要的话点这里点这里,暗号CSDN。 这是hutool作者路小磊讲解的hutool源码解读:点击观看 什么是 Hutool? 一个专

豆汁 6200

HuTool工具类TreeUtil简单使用

按照逻辑需求,将顶点,父节点,子节点按照需求查询得出list,而后放入nodeList里面,既可按照文档实例构造出前端所需的树形结构数据。在设置好treeNodeConfig配置以及自己额外增加的数据之后,即可传入转换器进行构造。最后返还treeNodes。2,在这里我们选择使用TreeUtil工具类能够事半功倍。1,根据需求,需要实现如下图结构。

玉之之的博客 7550

HuTool工具类 CollUtil 实现多个集合的交集、差集

2、交集支持2个以上多集合取交集,交集结果支持去重和不去重。3、差集只支持2个集合取差集,并且不支持差集结果去重。1、从验证结果看,符合取交集、差集预期。交集结果:[4, 5, 5]去重交集结果:[4, 5]差集结果:[1, 6]

hkl_Forever的博客 7730

【Java用法】Hutool树结构工具-TreeUtil快速构建树形结构的两种方式 + 数据排序

考虑到菜单等需求的普遍性,有用户提交了一个扩展性极好的树状结构实现。这种树状结构可以根据配置文件灵活的定义节点之间的关系,也能很好的兼容关系数据库中数据。实现 关系型数据库数据 Tree JSON 树状结构中最大的问题就是关系问题,在数据库中,每条数据通过某个字段关联自己的父节点,每个业务中这个字段的名字都不同,如何解决这个问题呢?PR的提供者提供了一种解决思路:自定义字段名,节点不再是一个bean,而是一个map,实现灵活的字段名定义。

No8g攻城狮的博客 1万+

hutool使用手册-常用API

*** 自定义函数判断集合是否包含某类值*/@Test。

z_1018的博客 5647

分布式存储系统关于GDPR条例中的数据清除原则

文章目录前言HDFS存储系统数据的完全删除基于加解密的输入输出流的数据保护方案 前言 关于GDPR是什么,可能许多同学之前并不太了解,至少笔者在之前也是不清楚的。GDPR全称为通用数据保护条例,General Data Protection Regulation。它是一项来自欧盟的关于计算机数据保护相关的条约,旨在规范系统如何收集,管控用户私人数据的种种行为。但是当前的一些存储系统并没有完全符合...

走在前往架构师的路上 2814

hutool使用指南

Hutool使用指南(一):时间日期工具 Hutool使用指南(二):字符串工具 Hutool使用指南(三):随机工具 Hutool使用指南(四):正则工具 Hutool使用指南(五):分页工具

csdndd521的博客 702

离心泵级间导叶的设计计算

离心泵级间导叶的设计计算高速离心泵级间流道的作用是将第一级复合叶轮流出的高速液流收集起来并送入第二级复合叶轮。级间流道的设计应考虑降低液体的流速,实现动能向压力能转化,减小液体的水力损失。级间流道主要有蜗壳形流道和导叶两种结构形...

cqzc55322的博客 2009

hutool介绍

Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。 Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当; Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。

小虚竹的专栏 1万+

【Java 工具类 Hutool】项目中如何引入 Hutool 并正确使用它

这个配置会传递依赖hutool-bom内所有dependencies的内容,当前hutool-bom内的dependencies全部设置了version,就意味着在maven resolve的时候hutool-bom内就算存在dependencyManagement也不会产生任何作用。

激流丶的博客 1万+

腾讯混元3D世界模型2.0实战:从AI生成到Unity/UE引擎集成全指南

生成式AI正在重塑3D内容创作流程,其核心原理是通过大语言模型理解自然语言描述,并驱动多阶段生成流水线自动创建3D资产与场景。这项技术为游戏开发、虚拟仿真和数字孪生领域带来了革命性的效率提升,能够将传统需要数周的美术协作流程压缩至几分钟。在实际应用中,开发者需要掌握本地环境部署、模型推理优化以及生成资产与主流游戏引擎的集成工作流。本文以腾讯开源的混元3D世界模型为例,详细解析如何将AI生成的场景通过插件高效导入Unity和Unreal Engine,并针对光照烘焙、材质调整、性能优化等工程实践问题提供解决方

cnracht8153的博客 765

Hutool详解

目录 一、Hutool是什么 1、概念 2、模块(组件) 二、工具和框架的区别 1、框架 2、工具 三、Hutool与已有工具的对应关系 四、Hutool的优势 一、Hutool是什么 1、概念 Hutool只是一个JAVA工具包,有助于简化代码,避免重复造轮子,每个程序员都有自己的工具包,它代表了你工作的积累,Hutool只是收集了大家积累的工具,Hutool几乎涵盖了工作中大部分业务的工具。 2、模块(组件) 一个Java基础工具类,对文件、...

MrRight000的博客 9988

WINCC8.1工业组态软件安装与授权配置指南

SCADA系统作为工业自动化控制的核心平台,通过实时数据采集与监控实现生产流程可视化。WINCC作为西门子旗舰级组态软件,其8.1版本凭借稳定的运行时环境在汽车制造、流程工业等领域广泛应用。本文从工业控制系统软件安装规范切入,重点解析WINCC8.1与Automation License Manager的协同工作原理,详细说明包括系统环境检查、安装包校验、授权文件配置等关键技术环节。针对工程实施中常见的内存配置不足、授权管理器报错等典型问题,提供经过现场验证的解决方案,特别适用于需要进行产线监控系统升级维护

cqwf95925的博客 863

hutool中的threadutil_Hutool

参考文章地址:https://blog.csdn.net/weixin_41843053/article/details/81740521 参考文章作者:https://blog.csdn.net/weixin_41843053 @赏花同学使用的工具的hutoolcn.hutoolhutool-all<Hutool工具2020-12-09 20:05:44简介Hutool是一个小而全的Jav...

weixin_39968801的博客 2433

hutool

什么是hutool Hutool 是一个 Java 工具包,也只是一个工具包,它帮助我们简化每一行代码,减少每一个方法, 导入安装 <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.21</version> </dependency> 加密...

qq_57979507的博客 3928

【matlab】使用alexnet进行特征提取

1.下载alexnet工具箱 在命令栏输入alexnet,若不报错说明已经安装,若出现错误按照提示去下载工具箱; 下载地址:https://ww2.mathworks.cn/matlabcentral/fileexchange/59133-deep-learning-toolbox-model-for-alexnet-network (1)需要先注册(十分简单),登陆,下载; (2)下载完成之后,...

jingjingliang1995的博客 5276

HuTool

import cn.hutool.core.bean.BeanUtil; import cn.hutool.http.HttpRequest; *** 简单 get 请求 String jsonStr = HttpUtil.get(url); *** 带参数, 带请求头 post cn.hutool.json.JSONObject param = JSONUtil.createObj(); p...

qq_20519453的博客 2581

IC/FPGA笔试/面试题分析(七)建立时间和保持时间类型考题汇总分析

自从召集2020届校招同行加入新建立的“IC/FPGA校招笔试面试交流群“,见识到了很多关于建立时间和保持时间分析的题目,在为别人解答疑惑,以及别人为自己解答疑惑的同时,自己对于知识的理解更加深刻了。 对于建立时间而言,从单独的对触发器的建立时间和保持时间的分析到了对电路(系统)的建立时间到保持时间的分析,前者是核心,后者是扩展,后者建立在前者的基础之上进行推到得到,同时也是芯片内部实际遵循的时...

Reborn Lee 1万+

hutool,真香!

hutool。Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。Hutool的设计思想是尽量减少重复的定义,让项目中的util这个package尽量少,总的来说有如下的几个思想:方法优先于对象自动识别优于用户定义便捷性与灵活性并存适配与兼容可选依赖原则无侵入原则。

1897

Lombok、Hutool

Lombok 原理: 使用注解的方式简化POJO的代码量,自动生成getter/setter/toString/EqualsAndHashCode 使用步骤: idea集成lombok插件 在setting→Build,Execution...→Compiler→Annotation Processors中勾选Enable annotation... Maven或者Gradle添加lombook依赖,官方取的依赖需要去掉作用域使其编译阶

芝士味椒盐的博客 8710

ECU-TEST笔记&使用技巧01

说明 1)所述均基于如下环境:ECU-TEST 8.0、Win10系统、NI Veristand 2018(HIL测试)。不排除因为版本及软件环境问题,所述方法不奏效或有更好的方法,欢迎交流,一起提高。 2)本博客以问答形式进行,所述问题均来自于实际测试(包括MIL、HIL测试)遇到的问题及需求,目的是提高测试效率和自动化测试序列的可维护性。 3)本博客尽量从测试方法及ECU-TEST原...

Eigrl的博客 1万+

Hutool 入门总结

经过前面六个步骤的学习,你已经掌握了 Hutool 的基础知识、进阶应用、性能优化以及在实际项目中的最佳实践。在实际项目中,合理使用 Hutool 能够大大提高开发效率。Hutool 提供了多个模块,每个模块都涵盖了不同的工具集,常见的有: |,提供了大量常用的工具方法,极大地提高了开发效率。| 加密解密(MD5、SHA、AES、RSA 等) | || 核心工具类(字符串、集合、日期、反射等) | || JDBC 操作封装(简化数据库访问) | || 轻量级日志封装(支持多种日志框架) | |

SAFE20242034的博客 1111

GPS从入门到放弃(一) --- GPS基础原理

GPS从入门到放弃(一) — GPS基础原理 GPS,全称Global Positioning System,已经广泛应用于我们的日常生活中了,现在的智能手机 里都会自带GPS定位功能。这是一个美国的全球定位系统,虽然我们现在也有北斗了,但毕竟GPS搞的早,所以先从它开始研究起。 整个GPS系统分三大部分: 地面站 卫星 接收机 地面站负责监控。它们通过接收、测量各个卫星信号,计算卫星的运行轨...

tyst08的专栏 2万+

hutool被收购怎么看

冻结Hutool版本升级,优先使用5.8.x,密切监控后续版本合规性。

leijmdas的专栏 3734

迭代器以及Hutool工具包

迭代器的使用分 3 步:获取迭代器 → 判断是否有下一个元素 → 获取元素 / 删除元素,核心 API 是: 示例 2:遍历 Set(和 List 写法完全一致) 示例 3:遍历 Map(先转成 Set 再用迭代器) Map 本身没有迭代器,需要先转成 /(推荐 ,效率更高): 、迭代器的避坑点(新手必看) 必须先 hasNext (),再 next ():直接调用 next () 会导致 (没有下一个元素); remove () 只能在 next () 之后调用:没调用 next (

2401_84390420的博客 805

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

hutool日期转换

在Java中,使用Hutool库进行日期转换是一个非常方便的选择。Hutool是一个小而全的Java工具类库,它提供了很多实用的工具类,包括日期处理。下面是如何使用Hutool进行日期转换的一些基本示例。

weixin_40593283的博客 2100

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: 微服务计算运费支付
下一篇: MySQL存储过程
春上大人
博客等级 码龄3年 1634粉丝 70原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值