自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

真香!使用這九款Java工具,開發(fā)效率提升80%

開發(fā) 前端
無論是通過Objects?來進(jìn)行對象的檢查與操作,還是使用StringUtils?進(jìn)行字符串的處理,抑或是借助BeanUtils與ReflectionUtils?進(jìn)行對象屬性的復(fù)制和反射操作,這些工具類都為我們提供了強大的支持。

在現(xiàn)代軟件開發(fā)中,常常會遇到各種工具類,這些工具類能夠極大地提高開發(fā)效率和代碼的可維護(hù)性。本文將介紹幾個在Java開發(fā)中非常實用的工具類,包括Objects、StringUtils、BeanUtils、ReflectionUtils、DigestUtils和HttpStatus。這些工具類涵蓋了從對象操作、字符串處理到數(shù)據(jù)加密和HTTP狀態(tài)碼的管理,幫助開發(fā)者簡化復(fù)雜的編程任務(wù)。

通過這些工具類的使用,開發(fā)者不僅能夠減少代碼量,還能夠提高代碼的可讀性和可復(fù)用性。接下來,我們將逐一探討每個工具類的關(guān)鍵方法及其應(yīng)用場景,帶你深入理解如何在日常開發(fā)中利用這些工具來提升工作效率。

今天,我決定與大家分享一些我常用的小工具,希望對你們有所幫助。

本文將分享9個在日常工作中必定會用到的小工具,主要內(nèi)容如下:

圖片圖片

1. Collections

首先介紹的是java.util包下的Collections類。該類主要用于對集合進(jìn)行操作或返回集合。我個人非常喜歡使用它。以下是一些常用的功能:

1.1 排序

在工作中,常常需要對集合進(jìn)行排序。我們來看一下如何使用Collections工具實現(xiàn)升序和降序:

List<Integer> list = new ArrayList<>();
list.add(2);
list.add(1);
list.add(3);
Collections.sort(list); // ASC
System.out.println(list);
Collections.reverse(list); // DESC
System.out.println(list);

輸出:

[1, 2, 3]
[3, 2, 1]

1.2 獲取最大值或最小值

有時需要在集合中找到最大值或最小值。此時可以使用Collections的max和min方法。

例如:

List<Integer> list = new ArrayList<>();
list.add(2);
list.add(1);
list.add(3);
Integer max = Collections.max(list);
Integer min = Collections.min(list);
System.out.println(max);
System.out.println(min);

輸出:

3
1

1.3 返回空集合

有時在檢查空值后,我們需要返回一個空集合??梢允褂胑mptyList方法。例如:

private List<Integer> fun(List<Integer> list) {
    if (list == null || list.size() == 0) {
        return Collections.emptyList();
    }
    // ...
    return list;
}

1.4 轉(zhuǎn)換為不可修改集合

為了防止后續(xù)程序修改某個集合的結(jié)果,有時需要將某個集合定義為不可修改。這可以通過Collections的unmodifiablexxx方法輕松實現(xiàn):

List<Integer> list = new ArrayList<>();
list.add(2);
list.add(1);
list.add(3);

List<Integer> integers = Collections.unmodifiableList(list);
integers.add(4); // 這里會拋出異常
System.out.println(integers);

輸出:

圖片圖片

1.5 轉(zhuǎn)換為線程安全集合

我們都知道,Java中的許多集合(如ArrayList、LinkedList、HashMap、HashSet等)都是非線程安全的。

換句話說,在多線程環(huán)境中,向這些集合添加數(shù)據(jù)會導(dǎo)致異常。

此時,可以使用Collections的synchronizedxxx方法直接將這些線程不安全的集合轉(zhuǎn)換為線程安全的集合。例如:

List<Integer> list = new ArrayList<>();
list.add(2);
list.add(1);
list.add(3);

List<Integer> integers = Collections.synchronizedList(list); // 將ArrayList轉(zhuǎn)換為線程安全集合
System.out.println(integers);

其底層實現(xiàn)會創(chuàng)建SynchronizedRandomAccessList或SynchronizedList類。這兩個類的許多方法會使用synchronized進(jìn)行鎖定。

當(dāng)然,Collections工具類中還有很多常用方法,這里不逐一介紹,大家可以自行探索。

圖片圖片

2. CollectionUtils

對于集合操作,除了前面提到的Collections工具類,CollectionUtils工具類也非常常用。

目前,比較主流的有apache中的org.apache.commons.collections包下的CollectionUtils工具類。

<dependency>
    <groupId>commons-collections</groupId>
    <artifactId>commons-collections</artifactId>
    <version>3.2.2</version>
</dependency>

它提供了許多方法。例如:

圖片圖片

當(dāng)然,Spring框架中也有org.springframework.util包下的CollectionUtils工具類。

不過,我個人推薦使用apache包下的CollectionUtils工具類,因為它有更多更全面的工具。例如,Spring中的CollectionUtils沒有判斷集合是否非空的方法,而apache中的CollectionUtils就有。

接下來,我們將以apache中的CollectionUtils工具類為例,介紹一些常用的方法。

2.1 檢查集合是否為空

CollectionUtils工具類的isEmpty方法可以輕松判斷集合是否為空,isNotEmpty方法判斷集合是否非空。

List<Integer> list = new ArrayList<>();
list.add(2);
list.add(1);
list.add(3);

if (CollectionUtils.isEmpty(list)) {
    System.out.println("集合為空。");
}

if (CollectionUtils.isNotEmpty(list)) {
    System.out.println("集合非空");
}

2.2 對兩個集合進(jìn)行操作

有時我們需要對兩個現(xiàn)有集合進(jìn)行操作,例如取交集或并集。

List<Integer> list = new ArrayList<>();
list.add(2);
list.add(1);
list.add(3);

List<Integer> list2 = new ArrayList<>();
list2.add(2);
list2.add(4);

// 獲取并集
Collection<Integer> unionList = CollectionUtils.union(list, list2);
System.out.println(unionList);

// 獲取交集
Collection<Integer> intersectionList = CollectionUtils.intersection(list, list2);
System.out.println(intersectionList);

// 獲取對稱差
Collection<Integer> disjunctionList = CollectionUtils.disjunction(list, list2);
System.out.println(disjunctionList);

// 獲取差集
Collection<Integer> subtractList = CollectionUtils.subtract(list, list2);
System.out.println(subtractList);

執(zhí)行結(jié)果:

[1, 2, 3, 4]
[2]
[1, 3, 4]
[1, 3]

對兩個集合的操作在實際工作中非常常見。但當(dāng)你想到某種操作時,可以先檢查是否有現(xiàn)成的工具,以避免浪費時間。一般來說,一些基本功能已經(jīng)實現(xiàn)。

3. Lists

如果你引入了com.google.guava的依賴,你會獲得許多有用的小工具。這里推薦一個位于com.google.common.collect包下的集合工具:Lists。

它非常實用,讓我愛不釋手。

<dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <version>28.2-jre</version>
</dependency>

3.1 快速初始化集合

有時,我們想在集合中初始化一些元素。這時可以使用Lists的newArrayList方法。例如:

List<Integer> list = Lists.newArrayList(1, 2, 3);

這比直接創(chuàng)建一個列表后再一個個添加元素方便得多。

執(zhí)行結(jié)果:

[1, 2, 3]

3.2 笛卡爾積

如果你想對兩個集合執(zhí)行笛卡爾積,Lists的cartesianProduct方法可以幫助你實現(xiàn):

List<Integer> list1 = Lists.newArrayList(1, 2, 3);
List<Integer> list2 = Lists.newArrayList(4, 5);
List<List<Integer>> productList = Lists.cartesianProduct(list1, list2);
System.out.println(productList);

執(zhí)行結(jié)果:

[[1, 4], [1, 5], [2, 4], [2, 5], [3, 4], [3, 5]]

3.3 拆分集合(分頁)

如果你想將一個大集合拆分成若干個小集合,可以使用Lists的partition方法:

List<Integer> list = Lists.newArrayList(1, 2, 3, 4, 5);
List<List<Integer>> partitionList = Lists.partition(list, 2);
System.out.println(partitionList);

執(zhí)行結(jié)果:

[[1, 2], [3, 4], [5]]

在這個例子中,列表有5個數(shù)據(jù)。我將列表集合拆分成3頁,每頁大小為2,也就是變成了3個小集合。

這是我最喜歡的方法之一,常在項目中使用。

例如,有一個需求:現(xiàn)在有10,000個id,需要調(diào)用批量用戶查詢接口來獲取用戶數(shù)據(jù)。但是如果直接查詢10,000個用戶,單個接口的響應(yīng)時間可能會非常慢。

如果改為批量處理,每次只查詢500個用戶,異步調(diào)用20次,就不會出現(xiàn)單個接口響應(yīng)慢的問題。

3.4 流處理

如果我們想將某個集合轉(zhuǎn)換為另一個接口,可以使用Lists的transform方法。例如:

List<String> list = Lists.newArrayList("a","b","c");
List<String> transformList = Lists.transform(list, x -> x.toUpperCase());
System.out.println(transformList);

小寫字母被轉(zhuǎn)換為大寫字母。

[A, B, C]

3.5 反轉(zhuǎn)順序

Lists提供了一個reverse()方法用于反轉(zhuǎn)順序。例如:

List<Integer> list = Lists.newArrayList(3, 1, 2, 5, 4);
List<Integer> reverseList = Lists.reverse(list);
System.out.println(reverseList);

執(zhí)行結(jié)果:

[4, 5, 2, 1, 3]

當(dāng)然,Lists還有其他有用的工具。我這里只展示了一些例子,有興趣的朋友可以深入研究。

圖片圖片

4. Objects

在jdk7之后,提供了Objects工具類,我們可以通過它對對象進(jìn)行操作。

4.1 檢查對象是否為null

在Java中,一切都是對象。檢查對象是否為null可以說是無處不在。Objects的isNull方法用于檢查對象是否為null,而nonNull方法用于檢查對象是否不為null。例如:

Integer i = new Integer(10);

if (Objects.isNull(i)) {
    System.out.println("對象為null");
}
if (Objects.nonNull(i)) {
    System.out.println("對象不為null");
}

4.2 當(dāng)對象為null時拋出異常

如果我們想在對象為null時拋出空指針異常,可以使用Objects的requireNonNull方法。例如:

Integer i = new Integer(128);

Objects.requireNonNull(i);
Objects.requireNonNull(i, "參數(shù)不能為空");
Objects.requireNonNull(i, () -> "參數(shù)不能為空");

4.3 檢查兩個對象是否相等

我們經(jīng)常需要檢查兩個對象是否相等。Objects為我們提供了equals方法,可以非常方便地實現(xiàn):

Integer i1 = new Integer(1);
Integer i2 = new Integer(1);

System.out.println(Objects.equals(i1, i2));

執(zhí)行結(jié)果:

true

但在使用這個方法時有一個坑。例如,如果將例子改為:

Integer i = new Integer(1);
Long l = new Long(1);

System.out.println(Objects.equals(i, l));

執(zhí)行結(jié)果:

false

你知道為什么輸出false嗎?可以在評論區(qū)交流。

4.4 獲取對象的hashCode

如果你想獲取某個對象的hashCode,可以使用Objects的hashCode方法。例如:

String str = new String("abc");
System.out.println(Objects.hashCode(str));

執(zhí)行結(jié)果:

96354

關(guān)于Objects的內(nèi)容介紹到此為止。有興趣的朋友可以查看下面更多的方法。

圖片圖片

5. StringUtils

字符串在我們的日常工作中使用得非常頻繁。

在我們的代碼中,我們常常需要檢查字符串是否為null、轉(zhuǎn)換大小寫、拆分字符串、比較字符串、去除多余空格、連接字符串、使用正則表達(dá)式等等。

如果我們只使用String類提供的方法,就需要手動寫大量的額外代碼,這樣既耗時又費力。

作為程序員,當(dāng)然需要學(xué)會懶惰 ??。現(xiàn)在有一個現(xiàn)成的工具類,org.apache.commons.lang3包下的StringUtils工具類,為我們提供了非常豐富的選擇。

5.1 檢查字符串是否為null

實際上,對于一個空字符串,不僅有null,還有""、" "、"null",以及許多其他情況。

StringUtils為我們提供了多個靜態(tài)方法來檢查字符串是否為null。例如:

String str1 = null;
String str2 = "";
String str3 = " ";
String str4 = "abc";
System.out.println(StringUtils.isEmpty(str1));
System.out.println(StringUtils.isEmpty(str2));
System.out.println(StringUtils.isEmpty(str3));
System.out.println(StringUtils.isEmpty(str4));
System.out.println("-------------------------------------");
System.out.println(StringUtils.isNotEmpty(str1));
System.out.println(StringUtils.isNotEmpty(str2));
System.out.println(StringUtils.isNotEmpty(str3));
System.out.println(StringUtils.isNotEmpty(str4));
System.out.println("-------------------------------------");
System.out.println(StringUtils.isBlank(str1));
System.out.println(StringUtils.isBlank(str2));
System.out.println(StringUtils.isBlank(str3));
System.out.println(StringUtils.isBlank(str4));
System.out.println("-------------------------------------");
System.out.println(StringUtils.isNotBlank(str1));
System.out.println(StringUtils.isNotBlank(str2));
System.out.println(StringUtils.isNotBlank(str3));
System.out.println(StringUtils.isNotBlank(str4));

輸出:

true
true
false
false
-------------------------------------
false
false
true
true
-------------------------------------
true
true
true
false
-------------------------------------
false
false
false
true

示例中的四個null檢查方法:isEmpty、isNotEmpty、isBlank和isNotBlank??梢愿鶕?jù)實際情況使用這些方法。

建議優(yōu)先使用 *isBlank* 和*isNotBlank* 方法,因為它們也會考慮到 *" "* 的情況。

5.2 拆分字符串

拆分字符串是一個常見需求。如果你直接使用String類的split方法,可能會出現(xiàn)空指針異常。

String str1 = null;
System.out.println(StringUtils.split(str1, ","));
System.out.println(str1.split(","));

輸出:

圖片圖片

使用StringUtils的split方法會返回null,而使用String的split方法則會報指針異常。

5.3 檢查是否為純數(shù)字

給定一個字符串,檢查它是否為純數(shù)字,可以使用isNumeric方法。例如:

String str1 = "123";
String str2 = "123abc";
String str3 = "0.33";
System.out.println(StringUtils.isNumeric(str1));
System.out.println(StringUtils.isNumeric(str2));
System.out.println(StringUtils.isNumeric(str3));

輸出:

true
false
false

5.4 將集合連接成字符串

有時,我們需要將集合的內(nèi)容連接成一個字符串,然后輸出。這時可以使用join方法。例如:

List<String> list = Lists.newArrayList("a", "b", "c");
List<Integer> list2 = Lists.newArrayList(1, 2, 3);
System.out.println(StringUtils.join(list, ","));
System.out.println(StringUtils.join(list2, " "));

輸出:

a,b,c
1 2 3

當(dāng)然,還有許多實用方法。我不會在這里一一介紹。

6. BeanUtils

Spring為我們提供了一個用于JavaBean的工具類,位于org.springframework.beans包下。它的名字是:BeanUtils。

讓我們看看這個工具能給我們帶來什么驚喜。

6.1 復(fù)制對象屬性

你是否遇到過這樣的需求:將某個對象的所有屬性復(fù)制到另一個對象中。這個時候,可以使用BeanUtils的copyProperties方法。例如:

User user1 = new User();
user1.setId(1L);
user1.setName("Dylan");
user1.setAddress("香港");

User user2 = new User();
BeanUtils.copyProperties(user1, user2);
System.out.println(user2);

6.2 獲取指定類的指定方法

如果你想獲取某個類的指定方法以便后續(xù)操作,可以使用BeanUtils的findDeclaredMethod方法。例如:

Method declaredMethod = BeanUtils.findDeclaredMethod(User.class, "getId");
System.out.println(declaredMethod.getName());

6.3 獲取指定方法的參數(shù)

如果你想獲取某個方法的參數(shù),可以使用BeanUtils的findPropertyForMethod方法。例如:

Method declaredMethod = BeanUtils.findDeclaredMethod(User.class, "getId");
PropertyDescriptor propertyForMethod = BeanUtils.findPropertyForMethod(declaredMethod);
System.out.println(propertyForMethod.getName());

如果你對BeanUtils感興趣,可以看看以下內(nèi)容:

7. ReflectionUtils

有時,我們需要在項目中使用reflection功能。如果我們使用最原始的方法開發(fā),代碼量會非常大,且麻煩。需要處理大量的異常和訪問權(quán)限問題。

好消息是,Spring為我們提供了一個ReflectionUtils工具類,位于org.springframework.util包下。

7.1 獲取方法

如果你想獲取某個類的某個方法,可以使用ReflectionUtils類的findMethod方法。例如:

Method method = ReflectionUtils.findMethod(User.class, "getId");

7.2 獲取字段

如果你想獲取某個類的某個字段,可以使用ReflectionUtils類的findField方法。例如:

Field field = ReflectionUtils.findField(User.class, "id");

7.3 執(zhí)行方法

如果你想通過反射調(diào)用某個方法并傳遞參數(shù),可以使用ReflectionUtils類的invokeMethod方法。例如:

ReflectionUtils.invokeMethod(method, springContextsUtil.getBean(beanName), param);

7.4 檢查字段是否為常量

如果你想檢查一個字段是否為常量,可以使用ReflectionUtils類的isPublicStaticFinal方法。例如:

Field field = ReflectionUtils.findField(User.class, "id");
System.out.println(ReflectionUtils.isPublicStaticFinal(field));

7.5 檢查是否為equals方法

如果你想檢查某個方法是否為equals方法,可以使用ReflectionUtils類的isEqualsMethod方法。例如:

Method method = ReflectionUtils.findMethod(User.class, "getId");
System.out.println(ReflectionUtils.isEqualsMethod(method));

當(dāng)然,這個類還有許多有趣的方法。有興趣的朋友可以點擊進(jìn)入這個類自行查看。

圖片圖片

8. DigestUtils

有時,我們需要對數(shù)據(jù)進(jìn)行加密,例如使用md5或sha256。

我們可以使用Apache的org.apache.commons.codec.digest包下的DigestUtils類。

8.1 MD5加密

如果你想使用MD5加密數(shù)據(jù),可以使用DigestUtils的md5Hex方法。例如:

String md5Hex = DigestUtils.md5Hex("Dylan");
System.out.println(md5Hex);

8.2 SHA256加密

如果你想使用SHA256加密數(shù)據(jù),可以使用DigestUtils的sha256Hex方法。例如:

String sha256Hex = DigestUtils.sha256Hex("Dylan");
System.out.println(sha256Hex);

當(dāng)然,這個工具還有許多其他加密方法:

圖片圖片

9. HttpStatus

很多時候,我們會在代碼中定義HTTP返回代碼。例如,正常接口返回200,異常返回500,如果接口找不到,則返回404。

private int SUCCESS_CODE = 200;
private int ERROR_CODE = 500;
private int NOT_FOUND_CODE = 404;

實際上,org.springframework.http包下的HttpStatus枚舉或org.apache.http包下的HttpStatus接口已經(jīng)為我們定義了常用的HTTP返回代碼。我們可以直接使用它們,確實不需要重新定義。

圖片圖片

結(jié)論

在本篇文章中,我們深入探討了多個實用的Java工具類,展示了如何利用這些類來簡化編程工作。無論是通過Objects來進(jìn)行對象的檢查與操作,還是使用StringUtils進(jìn)行字符串的處理,抑或是借助BeanUtils與ReflectionUtils進(jìn)行對象屬性的復(fù)制和反射操作,這些工具類都為我們提供了強大的支持。此外,DigestUtils則讓數(shù)據(jù)加密變得簡單高效,而HttpStatus則幫助我們規(guī)范HTTP響應(yīng)碼的使用。

掌握這些工具類的使用,不僅可以提升開發(fā)效率,還能減少潛在的錯誤,使代碼更加簡潔和易于維護(hù)。在今后的開發(fā)實踐中,希望讀者能夠充分利用這些工具,提升自己的編程技能,寫出更加高質(zhì)量的代碼。歡迎大家探索更多的Java工具類,進(jìn)一步增強你的開發(fā)能力。

責(zé)任編輯:武曉燕 來源: 路條編程
相關(guān)推薦

2025-01-14 12:00:00

Java開發(fā)代碼

2020-10-22 15:05:43

開發(fā)者技能工具

2021-07-16 23:32:28

工具職場軟件

2016-10-09 20:07:43

2020-07-09 10:02:27

Python開發(fā)工具

2019-10-09 10:10:42

軟件Windows程序員

2021-12-28 09:40:48

VS Code工具代碼

2020-08-09 18:06:57

Linux系統(tǒng)工具

2021-04-18 18:58:16

JRebelJVM插件

2025-01-21 08:01:26

2024-10-07 08:13:44

AI輔助編程工具

2023-08-01 08:01:27

工具安全漏洞

2024-07-30 14:14:34

2019-03-28 14:22:26

工具代碼開發(fā)

2020-03-29 11:46:16

前端開發(fā)前端工具

2023-03-05 15:38:43

D2C 工具前端

2025-03-31 02:22:00

2009-06-05 15:04:36

Eclipse代碼模版

2023-01-14 15:38:07

日志管理工具

2025-03-04 13:00:00

JavaScrip代碼語言
點贊
收藏

51CTO技術(shù)棧公眾號