首先,要明白一点hutool工具包的出现就是要避免开发中的重复造轮子,所以可以说糊涂工具包是敏捷开发的福音
但是,hutool工具包也有一些方法的确存在着性能问题,并不是所有企业都能接受hutool的大规模使用,但是国内也有很多企业使用hutool,包括我所在的实习公司
我其实最想要说的一点就是,hutool固然强大,但是术业有专攻,像hutool的id生成器,json转换,excel等等,雪花算法生产id建议自己写包装一个,json转换使用主流的fastJson(Gjson)、easyPOI等来操作,特别是java8的新特性stream流(stream流学习链接),感觉比hutool的集合类方法使用起来顺溜多了,而且看起来也高大上且舒服
public class HutoolUtilsTest {
public static void main(String[] args) {
/**
* 参考开发文档以及自己个人编程习惯
* 只列举实际开发中实用性比较高的工具类方法
*/
/**
* ------------------------------------------------------------------
* 一、Convert类
* ------------------------------------------------------------------
*/
/**
* 1、转换为日期对象
* 开发中经常会有前端传日期
* 2021-02-11 00:00:00
*/
String dateTime = "2021-02-11";
System.out.println(Convert.toDate(dateTime));
/**
* 2、转换为集合
* 接受前端json格式后,例如有些多选的数据,我们可以用转换为集合
* [苹果, 梨子, 桃子]
*/
String[] str={"苹果","梨子","桃子"};
System.out.println(Convert.toList(str));
/**
* 3、金额大小写转换
* 壹佰元捌角陆分
*/
double price = 100.86;
System.out.println(Convert.digitToChinese(price));
/**
* ------------------------------------------------------------------
* 二、DateUtil类\DateTime类
* 该类是最实用和常用的类,避免了很多企业中的重复造轮子
* ------------------------------------------------------------------
*/
/**
* 1、自定义日期格式转化
* string转Date
*/
String dateStr0 = "2021-02-11 00:00:00";
System.out.println(DateUtil.parse(dateStr0, "yyyy-MM-dd HH:mm:ss"));
/**
* 2、获得制定日期的开始时间、结束时间,每月的开始和结束时间等等
* 经常用到前端传2个日期,放回该日期间的数据
*/
String dateStr1 = "2021-03-01 22:33:23";
Date date1 = DateUtil.parse(dateStr1);
//一天的开始,结果:2021-03-01 00:00:00
System.out.println(DateUtil.beginOfDay(date1));
//一天的结束,结果:2021-03-01 23:59:59
System.out.println(DateUtil.endOfDay(date1));
/**
* 3、日期时间偏移
* 经常也有业务需求获取进7天/一个月等的数据
*/
String dateStr2 = "2021-03-01 22:33:23";
Date date2 = DateUtil.parse(dateStr2);
//结果:2021-03-03 22:33:23
Date newDate = DateUtil.offset(date2, DateField.DAY_OF_MONTH, 2);
//常用偏移,结果:2021-03-04 22:33:23
DateTime newDate2 = DateUtil.offsetDay(date2, 3);
//常用偏移,结果:2021-03-01 19:33:23
DateTime newDate3 = DateUtil.offsetHour(date2, -3);
//昨天;2021-02-05 17:04:06
System.out.println(DateUtil.yesterday());
//明天;2021-02-07 17:04:06
System.out.println(DateUtil.tomorrow());
/**
* 4、日期字符串解析
*/
// 解析ISO时间:2020-01-23
LocalDateTime localDateTime = LocalDateTimeUtil.parse("2020-01-23T12:23:56");
System.out.println(localDateTime.toLocalDate());
// 解析自定义格式时间:2020-01-23T00:00
localDateTime = LocalDateTimeUtil.parse("2020-01-23", DatePattern.NORM_DATE_PATTERN);
System.out.println(localDateTime.toString());
/**
*计算时间间隔
*/
LocalDateTime start = LocalDateTimeUtil.parse("2019-02-02T00:00:00");
LocalDateTime end = LocalDateTimeUtil.parse("2020-02-02T00:00:00");
Duration between = LocalDateTimeUtil.between(start, end);
// 365
System.out.println(between.toDays());
/**
* ------------------------------------------------------------------
* 三、工具类
* 该类是最实用和常用的类,避免了很多企业中的重复造轮子
* ------------------------------------------------------------------
*/
/**
* (1) 字符串工具-StrUtil
* 1、removePrefix、removeSuffix方法
* 这两个是去掉字符串的前缀后缀的,例如去个文件名的扩展名
* pretty_girl
* 还有忽略大小写的removePrefixIgnoreCase
* 和 removeSuffixIgnoreCase 都比较实用
*/
String fileName = StrUtil.removeSuffix("pretty_girl.jpg", ".jpg");
/**
* 2、format方法
*/
String template = "{}爱{},就像老鼠爱大米";
//str2 -> 我爱你,就像老鼠爱大米
String str2 = StrUtil.format(template, "我", "你");
/**
* (2) 分页工具-PageUtil
* 1、分页彩虹算法
* 上一页 3 4 [5] 6 7 8 下一页
*
*/
//参数意义分别为:当前页、总页数、每屏展示的页数
int[] rainbow = PageUtil.rainbow(5, 20, 6);
//结果:[3, 4, 5, 6, 7, 8]
System.out.println(Arrays.toString(rainbow));
/**
* 1、枚举工具-EnumUtil
* //定义枚举
* public enum TestEnum {
* TEST1, TEST2, TEST3;
* }
*/
//定义枚举
List<Object> types = EnumUtil.getFieldValues(TestEnum.class, "type");
//结果:[type1, type2, type3]
/**
* (3)唯一ID工具-IdUtil
* 1、UUID
* 说明 Hutool重写java.util.UUID的逻辑,对应类为cn.hutool.core.lang.UUID,使生成不带-的UUID字符串不再需要做字符替换,性能提升一倍左右。
*/
//生成的UUID是带-的字符串,类似于:a5c8a5e8-df2b-4706-bea4-08d0939410e3
String uuid = IdUtil.randomUUID();
//生成的是不带-的字符串,类似于:b17f24ff026d40949c85a24f4f375d42
String simpleUUID = IdUtil.simpleUUID();
/**
* 2、ObjectId
* ObjectId是MongoDB数据库的一种唯一ID生成策略,是UUID version1的变种
*/
//生成类似:5b9e306a4df4f8c54a39fb0c
String id = ObjectId.next();
//方法2:从Hutool-4.1.14开始提供
String id2 = IdUtil.objectId();
/**
* 3、Snowflake
* 分布式系统中,有一些需要使用全局唯一ID的场景,有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。Twitter的Snowflake 算法就是这种生成器。
*/
//参数1为终端ID
//参数2为数据中心ID
Snowflake snowflake = IdUtil.getSnowflake(1, 1);
long id3 = snowflake.nextId();
/**
* (4)Bean工具-BeanUtil
* 1、BeanUtil.fillBeanWithMap 使用Map填充bean
*/
HashMap<String, Object> map = CollUtil.newHashMap();
map.put("name", "Joe");
map.put("age", 12);
map.put("openId", "DFDFSDFWERWER");
SubPerson person = BeanUtil.fillBeanWithMap(map, new SubPerson(), false);
/**
* 2、Bean转为Map
*/
SubPerson person = new SubPerson();
person.setAge(14);
person.setOpenid("11213232");
person.setName("测试A11");
person.setSubName("sub名字");
Map<String, Object> map = BeanUtil.beanToMap(person);
/**
* 3、Bean转Bean
*/
SubPerson p1 = new SubPerson();
p1.setSlow(true);
p1.setName("测试");
p1.setSubName("sub测试");
Map<String, Object> map = MapUtil.newHashMap();
BeanUtil.copyProperties(p1, map);
/**
* ------------------------------------------------------------------
* 四、集合类
* 该类是最实用和常用的类,避免了很多企业中的重复造轮子
* ------------------------------------------------------------------
*/
/**
* (1)、集合工具-CollUtil
* 1. join 方法
*/
String[] col= new String[]{"a","b","c","d","e"};
List<String> colList = CollUtil.newArrayList(col);
//str -> a#b#c#d#e
String str3 = CollUtil.join(colList, "#");
/**
* (2)、newHashMap、newHashSet、newArrayList方法
*/
HashMap<String, String> map = CollUtil.newHashMap();
HashSet<String> set = CollUtil.newHashSet();
ArrayList<String> list = CollUtil.newArrayList();
/**
* (3)isEmpty、isNotEmpty方法
* 判断集合是否为空(包括null和没有元素的集合)
*/
CollUtil.isEmpty(list);
}
}