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 判斷是否爲基本類型,包括包裝類型和非包裝類型。

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