• Java奇淫异术


    Lombok

    1、导入依赖

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.16</version>
    </dependency>
    

    2、注解注释

    • @Data:这个注解包含getXxx()、setXxx()方法、equals()、hashCode()、toString()等方法,相当于@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode这5个注解的合集。
    • @NoArgsConstructor:无参构造
    • @AllArgsConstructor:全参构造
    • @EqualsAndHashCode(callSuper = false):生成equals()和hashCode()方法,并且不比较父类属性,子类属性相同即可,建议子类都加上此注解
    • @Accessors(chain = true):开启链式调用
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @EqualsAndHashCode(callSuper = false)
    @Accessors(chain = true)
    @TableName("user")
    @ApiModel("用户")
    public class User implements Serializable, UserDetails {
    
        private static final long serialVersionUID = 1L;
        
        /**
         * 主键id
         */
        @ApiModelProperty(value = "主键id")
        @TableId(value = "id", type = IdType.AUTO)
        private Long id;
    
        /**
         * 用户名
         */
        @ApiModelProperty(value = "用户名", required = true)
        private String username;
    
        /**
         * 密码
         */
        @ApiModelProperty(value = "密码", required = true)
        private String password;
    }
    

    Hutool

    1、导入依赖

    <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>5.5.7</version>
    </dependency>
    

    2、用法

    2.1 类型转换

    2.1.1 转换为字符串

    int a = 1;
    //aStr为"1"
    String aStr = Convert.toStr(a);
    
    long[] b = {1, 2, 3, 4, 5};
    //bStr为:"[1, 2, 3, 4, 5]"
    String bStr = Convert.toStr(b);
    

    2.1.2 转换为指定类型数组

    String[] b = { "1", "2", "3", "4" };
    //结果为Integer数组
    Integer[] intArray = Convert.toIntArray(b);
    
    long[] c = {1,2,3,4,5};
    //结果为Integer数组
    Integer[] intArray2 = Convert.toIntArray(c);
    

    2.1.3 转换为日期对象

    String a = "2021-01-25";
    Date value = Convert.toDate(a);
    

    2.1.4 转换为集合

    Object[] a = {"a", "你", "好", "", 1};
    List<?> list = Convert.toList(a);
    

    2.2 日期时间

    2.2.1 字符串转日期

    DateUtil.parse方法会自动识别一些常用格式,包括:

    1. yyyy-MM-dd HH:mm:ss
    2. yyyy-MM-dd
    3. HH:mm:ss
    4. yyyy-MM-dd HH:mm
    5. yyyy-MM-dd HH:mm:ss
    String dateStr = "2021-01-25";
    Date date = DateUtil.parse(dateStr);
    

    我们也可以使用自定义日期格式转化:

    String dateStr = "2021-01-25";
    Date date = DateUtil.parse(dateStr, "yyyy-MM-dd");
    

    2.2.2 格式化日期输出

    String dateStr = "2021-01-25";
    Date date = DateUtil.parse(dateStr);
    
    //结果 2021/01/25
    String format = DateUtil.format(date, "yyyy/MM/dd");
    
    //常用格式的格式化,结果:2021-01-25
    String formatDate = DateUtil.formatDate(date);
    
    //结果:2021-01-25 00:00:00
    String formatDateTime = DateUtil.formatDateTime(date);
    
    //结果:00:00:00
    String formatTime = DateUtil.formatTime(date);
    

    2.2.3 获取Date对象的某个部分

    Date date = DateUtil.date();
    //获得年的部分
    DateUtil.year(date);
    //获得月份,从0开始计数
    DateUtil.month(date);
    //获得月份枚举
    DateUtil.monthEnum(date);
    

    2.2.4 计时器

    计时器用于计算某段代码或过程花费的时间

    TimeInterval timer = DateUtil.timer();
    
    //---------------------------------
    //-------这是执行过程
    //---------------------------------
    
    timer.interval();//花费毫秒数
    timer.intervalRestart();//返回花费时间,并重置开始时间
    timer.intervalMinute();//花费分钟数
    

    2.2.5 其他

    //年龄
    DateUtil.ageOfNow("1990-01-30");
    
    //是否闰年
    DateUtil.isLeapYear(2017);
    

    2.3 文件拷贝

    BufferedInputStream in = FileUtil.getInputStream("d:/test.txt");
    BufferedOutputStream out = FileUtil.getOutputStream("d:/test2.txt");
    //默认DEFAULT_BUFFER_SIZE 8092
    IoUtil.copy(in, out);
    //指定缓冲区大小
    IoUtil.copy(in, out, 1024);
    

    2.4 字符串工具

    2.4.1 字符串判空

    • StrUtil.isBlank:判断字符串是否为空(null,"",空格)返回true,常用于判断单一字段是否有空的

    • StrUtil.isNotBlank

    • StrUtil.isEmpty:判断字符串是否为空(null,"")返回true,常用于判断单一字段是否有空的

    • StrUtil.isBlank

    • StrUtil.hasBlank:判断字符串是否有空(null,"",空格)返回true,常用于判断好多字段是否有空的(例如web表单数据)

    • StrUtil.hasEmpty:判断字符串是否为空(null,"")返回true,常用于判断好多字段是否有空的(例如web表单数据)

    2.4.2 去除字符串前后缀

    • StrUtil.removePrefix:去掉字符串的前缀

    • StrUtil.removeSuffix:去掉字符串的后缀(String fileName = StrUtil.removeSuffix("pretty_girl.jpg", ".jpg") //fileName -> pretty_girl)

    • StrUtil.removePrefixIgnoreCase:去掉字符串的前缀(忽略大小写)

    • StrUtil.removeSuffixIgnoreCase:去掉字符串的后缀(忽略大小写)

    2.4.3 sub截取字符串方法

    不得不提一下这个方法,有人说String有了subString你还写它干啥,我想说subString方法越界啥的都会报异常,你还得自己判断,难受死了,我把各种情况判断都加进来了,而且index的位置还支持负数哦,-1表示最后一个字符,还有就是如果不小心把第一个位置和第二个位置搞反了,也会自动修正

    String str = "abcdefgh";
    String strSub1 = StrUtil.sub(str, 2, 3); //strSub1 -> c
    String strSub2 = StrUtil.sub(str, 2, -3); //strSub2 -> cde
    String strSub3 = StrUtil.sub(str, 3, 2); //strSub2 -> c
    

    2.4.4 format方法

    灵感来自slf4j,可以使用字符串模板代替字符串拼接,我也自己实现了一个,而且变量的标识符都一样,神马叫无缝兼容~~来

    String template = "{}爱{},就像老鼠爱大米";
    String str = StrUtil.format(template, "我", "你"); //str -> 我爱你,就像老鼠爱大米
    

    参数我定义成了Object类型,如果传别的类型的也可以,会自动调用toString()方法的。

    2.5 对象工具-ObjectUtil

    2.5.1 ObjectUtil.equal

    比较两个对象是否相等,相等需满足以下条件之一:

    1. obj1 == null && obj2 == null
    2. obj1.equals(obj2)

    2.5.2 ObjectUtil.length

    计算对象长度,如果是字符串调用其length方法,集合类调用其size方法,数组调用其length属性,其他可遍历对象遍历计算长度。

    支持的类型包括:

    • CharSequence
    • Collection
    • Map
    • Iterator
    • Enumeration
    • Array

    2.5.3 ObjectUtil.contains

    对象中是否包含元素。

    支持的对象类型包括:

    • String
    • Collection
    • Map
    • Iterator
    • Enumeration
    • Array

    2.5.4 判断是否为null

    • ObjectUtil.isNull
    • ObjectUtil.isNotNull

    2.5.5 克隆

    • ObjectUtil.clone 克隆对象,如果对象实现Cloneable接口,调用其clone方法,如果实现Serializable接口,执行深度克隆,否则返回null
    • ObjectUtil.cloneIfPossible 返回克隆后的对象,如果克隆失败,返回原对象
    • ObjectUtil.cloneByStream 序列化后拷贝流的方式克隆,对象必须实现Serializable接口

    2.5.6 序列化和反序列化

    • serialize 序列化,调用JDK序列化
    • unserialize 反序列化,调用JDK

    2.5.7 判断基本类型

    ObjectUtil.isBasicType 判断是否为基本类型,包括包装类型和非包装类型。

  • 相关阅读:
    Door man
    Borg Maze
    Agri-Net
    Highways
    Truck History
    Arctic Network
    QS Network
    用贝塞尔曲线实现水波效果
    在一个Label上设置多种颜色字体
    用UIImageView作出动画效果
  • 原文地址:https://www.cnblogs.com/MessiXiaoMo3334/p/14326569.html
Copyright © 2020-2023  润新知