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 判断是否为基本类型,包括包装类型和非包装类型。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章