首先,要明白一点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);
 
 
 
    }
}