成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

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

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

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

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

圖片圖片

1. Collections

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

1.1 排序

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

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 返回空集合

有時在檢查空值后,我們需要返回一個空集合。可以使用emptyList方法。例如:

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

1.4 轉換為不可修改集合

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

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 轉換為線程安全集合

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

換句話說,在多線程環境中,向這些集合添加數據會導致異常。

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

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

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

其底層實現會創建SynchronizedRandomAccessList或SynchronizedList類。這兩個類的許多方法會使用synchronized進行鎖定。

當然,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>

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

圖片圖片

當然,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 對兩個集合進行操作

有時我們需要對兩個現有集合進行操作,例如取交集或并集。

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);

執行結果:

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

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

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);

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

執行結果:

[1, 2, 3]

3.2 笛卡爾積

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

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);

執行結果:

[[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);

執行結果:

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

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

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

例如,有一個需求:現在有10,000個id,需要調用批量用戶查詢接口來獲取用戶數據。但是如果直接查詢10,000個用戶,單個接口的響應時間可能會非常慢。

如果改為批量處理,每次只查詢500個用戶,異步調用20次,就不會出現單個接口響應慢的問題。

3.4 流處理

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

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

小寫字母被轉換為大寫字母。

[A, B, C]

3.5 反轉順序

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

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

執行結果:

[4, 5, 2, 1, 3]

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

圖片圖片

4. Objects

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

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 當對象為null時拋出異常

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

Integer i = new Integer(128);

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

4.3 檢查兩個對象是否相等

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

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

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

執行結果:

true

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

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

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

執行結果:

false

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

4.4 獲取對象的hashCode

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

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

執行結果:

96354

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

圖片圖片

5. StringUtils

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

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

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

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

5.1 檢查字符串是否為null

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

StringUtils為我們提供了多個靜態方法來檢查字符串是否為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。可以根據實際情況使用這些方法。

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

5.2 拆分字符串

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

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

輸出:

圖片圖片

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

5.3 檢查是否為純數字

給定一個字符串,檢查它是否為純數字,可以使用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 將集合連接成字符串

有時,我們需要將集合的內容連接成一個字符串,然后輸出。這時可以使用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

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

6. BeanUtils

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

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

6.1 復制對象屬性

你是否遇到過這樣的需求:將某個對象的所有屬性復制到另一個對象中。這個時候,可以使用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 獲取指定類的指定方法

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

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

6.3 獲取指定方法的參數

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

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

如果你對BeanUtils感興趣,可以看看以下內容:

7. ReflectionUtils

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

好消息是,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 執行方法

如果你想通過反射調用某個方法并傳遞參數,可以使用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));

當然,這個類還有許多有趣的方法。有興趣的朋友可以點擊進入這個類自行查看。

圖片圖片

8. DigestUtils

有時,我們需要對數據進行加密,例如使用md5或sha256。

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

8.1 MD5加密

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

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

8.2 SHA256加密

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

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

當然,這個工具還有許多其他加密方法:

圖片圖片

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接口已經為我們定義了常用的HTTP返回代碼。我們可以直接使用它們,確實不需要重新定義。

圖片圖片

結論

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

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

責任編輯:武曉燕 來源: 路條編程
相關推薦

2025-01-14 12:00:00

Java開發代碼

2020-10-22 15:05:43

開發者技能工具

2021-07-16 23:32:28

工具職場軟件

2016-10-09 20:07:43

2020-07-09 10:02:27

Python開發工具

2019-10-09 10:10:42

軟件Windows程序員

2021-12-28 09:40:48

VS Code工具代碼

2020-08-09 18:06:57

Linux系統工具

2025-01-21 08:01:26

2021-04-18 18:58:16

JRebelJVM插件

2024-10-07 08:13:44

AI輔助編程工具

2024-07-30 14:14:34

2023-08-01 08:01:27

工具安全漏洞

2019-03-28 14:22:26

工具代碼開發

2023-03-05 15:38:43

D2C 工具前端

2025-03-31 02:22:00

2020-03-29 11:46:16

前端開發前端工具

2023-01-14 15:38:07

日志管理工具

2009-06-05 15:04:36

Eclipse代碼模版

2025-03-04 13:00:00

JavaScrip代碼語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩一区精品 | 亚洲欧美一区二区三区国产精品 | 亚洲 自拍 另类 欧美 丝袜 | 国产高清久久 | 日韩电影一区二区三区 | 在线视频一区二区 | 免费成人毛片 | 91 在线| 91爱啪啪 | 中文久久 | 国产日产欧产精品精品推荐蛮挑 | 亚洲成人福利 | 夜夜骑首页 | 国产日韩欧美在线 | 精品国产一区二区三区免费 | 久久久一二三区 | 亚洲国产精品一区二区三区 | 亚洲一区欧美 | 91精品国产一区 | 亚洲一区视频在线 | 91精品国产麻豆 | 亚洲高清视频一区二区 | 亚洲精品国产区 | 91在线免费视频 | 成人福利在线 | 黄网站免费在线观看 | 亚洲精品综合 | 狠狠操狠狠搞 | 国产乱人伦 | 欧美一级电影免费观看 | 精品国产一区二区三区日日嗨 | 男人天堂网址 | 雨宫琴音一区二区在线 | 一区二区成人 | 狠狠久| 久久激情五月丁香伊人 | 欧美6一10sex性hd | 亚洲欧美在线观看 | 午夜国产羞羞视频免费网站 | 国产一级片一区二区 | 国产精品久久久久久久久免费软件 |