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

這九個(gè)工具庫讓我的 Java 開發(fā)效率提升了80%

開發(fā)
在這篇文章中,我介紹了 Java 開發(fā)中九個(gè)非常實(shí)用的工具類,它們可以幫助我們提高開發(fā)效率,減少重復(fù)代碼,并簡(jiǎn)化日常的開發(fā)任務(wù)。

在 Java 語言的龐大體系中,有很多不錯(cuò)的工具類,能夠大大提升我們的開發(fā)效率。但如果你不了解它們,就很可能會(huì)重復(fù)編寫一些類似的代碼。這不僅浪費(fèi)時(shí)間,而且你寫的可能還不如現(xiàn)有的好。今天,我決定和大家分享一些我經(jīng)常使用的工具類,希望對(duì)你們有所幫助。

一、Collections

首先是 java.util 包下的 Collections 類。這個(gè)類主要用于操作集合,我個(gè)人非常喜歡使用它。以下是一些常用功能:

1. 排序

在工作中,經(jīng)常需要對(duì)集合進(jìn)行排序。讓我們看看如何使用 Collections 工具實(shí)現(xiàn)升序和降序排列:

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

輸出:

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

2. 獲取最大值或最小值

有時(shí)需要在集合中找到最大值或最小值,這時(shí)可以使用 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

3. 返回空集合

有時(shí),在檢查為空后,我們需要返回一個(gè)空集合,可以使用 emptyList 方法。例如:

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

4. 轉(zhuǎn)換為不可修改的集合

為了防止后續(xù)程序修改某個(gè)集合的結(jié)果,有時(shí)我們需要將某個(gè)集合定義為不可修改的。這可以通過使用 Collections 的 unmodifiablexxx 方法輕松實(shí)現(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);

輸出:

Exception in thread "main" java.lang.UnsupportedOperationException
    at java.base/java.util.Collections$UnmodifiableCollection.add(Collections.java:1092)
    at com.spring.demo.DemoApplication.main(DemoApplication.java:46)

5. 轉(zhuǎn)換為線程安全的集合

我們都知道,Java 中的許多集合,如 ArrayList、LinkedList、HashMap、HashSet 等,都不是線程安全的。 換句話說,在多線程環(huán)境中,向這些集合中添加數(shù)據(jù)存在線程安全問題。這時(shí),可以使用 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);

它的底層實(shí)現(xiàn)會(huì)創(chuàng)建 SynchronizedRandomAccessList 或 SynchronizedList 類。這兩個(gè)類的許多方法都會(huì)用 synchronized 加鎖。

Collections 工具類中還有許多常用方法,這里就不一一介紹了。

二、CollectionUtils

對(duì)于集合操作,除了前面提到的 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 工具類。不過,我個(gè)人推薦使用 apache 包下的 CollectionUtils 工具類,因?yàn)樗墓ぞ吒嗲腋妗Ee個(gè)簡(jiǎn)單的例子,Spring 中的 CollectionUtils 工具類沒有判斷集合是否不為空的方法,而 apache 中的有。 接下來,我們以 apache 中的 CollectionUtils 工具類為例,介紹一些常用方法。

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("Collection is empty.");
}
if (CollectionUtils.isNotEmpty(list)) {
    System.out.println("Collection is not empty");
}

2. 對(duì)兩個(gè)集合進(jìn)行操作

有時(shí)我們需要對(duì)兩個(gè)已有的集合進(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);
//獲取交集的補(bǔ)集
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]

三、Lists

如果你引入 com.google.guava 的依賴,會(huì)得到很多有用的工具類。這里推薦一個(gè) com.google.common.collect 包下的集合工具:Lists。

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

1. 快速初始化集合

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

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

這比直接創(chuàng)建一個(gè)列表然后逐個(gè)添加元素更方便。 執(zhí)行結(jié)果:

[1, 2, 3]

2. 笛卡爾積

如果你想對(duì)兩個(gè)集合進(jìn)行笛卡爾積操作,Lists 的 cartesianProduct 方法可以幫你實(shí)現(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. 分割集合

如果你想將一個(gè)大集合分割成幾個(gè)小集合,可以使用 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]]

在這個(gè)例子中,列表有 5 條數(shù)據(jù)。我將列表集合分成了 3 份,每份大小為 2,即變成了 3 個(gè)小集合。 這是我最喜歡的方法之一,我在項(xiàng)目中經(jīng)常使用。

4. 流處理

如果我們想對(duì)集合內(nèi)的元素進(jì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)換為大寫字母。 執(zhí)行結(jié)果:

[A, B, C]

5. 反轉(zhuǎn)順序

Lists 有一個(gè) 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]

Lists 還有其他有用的工具,這里只是舉幾個(gè)例子,感興趣的朋友可以自行研究。

四、Objects

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

1. 檢查對(duì)象是否為空

在 Java 中,一切皆對(duì)象。檢查對(duì)象是否為空可以說是無處不在。Objects 的 isNull 方法檢查對(duì)象是否為空,nonNull 方法檢查對(duì)象是否不為空。例如:

Integer i = new Integer(10);
if (Objects.isNull(i)) {
    System.out.println("Object is null");
}
if (Objects.nonNull(i)) {
    System.out.println("Object is not null");
}

2. 對(duì)象為空時(shí)拋出異常

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

Integer i = new Integer(128);
Objects.requireNonNull(i);
Objects.requireNonNull(i, "Parameters cannot be null");
Objects.requireNonNull(i, () -> "Parameters cannot be null");

3. 檢查兩個(gè)對(duì)象是否相等

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

Integer i1 = new Integer(1);
Integer i2 = new Integer(1);
System.out.println(Objects.equals(i1, i2));

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

true

但是使用這個(gè)方法時(shí)有一個(gè)坑。例如,如果將例子改為:

Integer i = new Integer(1);
Long l = new Long(1);
System.out.println(Objects.equals(i, l));

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

false

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

4. 獲取對(duì)象的哈希碼

如果你想獲取某個(gè)對(duì)象的哈希碼,可以使用 Objects 的 hashCode 方法。例如:

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

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

96354

關(guān)于 Objects 的內(nèi)容就介紹到這里,更多的方法可以自行研究。

五、StringUtils

字符串在我們的日常工作中使用得非常頻繁。在我們的代碼中,經(jīng)常需要檢查字符串是否為空、轉(zhuǎn)換大小寫、分割字符串、比較字符串、去除多余空格、連接字符串、使用正則表達(dá)式等等。 如果我們只使用 String 類提供的方法,就需要手動(dòng)編寫大量額外的代碼,既耗時(shí)又費(fèi)力。作為程序員,當(dāng)然要學(xué)會(huì)偷懶?,F(xiàn)在有一個(gè)現(xiàn)成的工具類,即 org.apache.commons.lang3 包下的 StringUtils 工具類,它為我們提供了非常多操作 String 的方法。

1. 檢查字符串是否為空

實(shí)際上,對(duì)于空字符串,不僅有 null,還有“”、“ ”、“null”等多種情況。StringUtils 為我們提供了多個(gè)靜態(tài)方法來檢查字符串是否為空。例如:

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

示例中的四個(gè)空檢查方法:isEmpty、isNotEmpty、isBlank 和 isNotBlank。你可以根據(jù)實(shí)際情況使用這些方法。 建議優(yōu)先使用 isBlank 和 isNotBlank 方法,因?yàn)樗鼈儠?huì)考慮更多情況。

2. 分割字符串

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

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

輸出:

Exception in thread "main" java.lang.NullPointerException
    at java.base/java.util.Objects.requireNonNull(Objects.java:221)
    at java.base/java.util.regex.Pattern.split(Pattern.java:1269)
    at java.base/java.lang.String.split(String.java:2392)
    at com.spring.demo.DemoApplication.main(DemoApplication.java:39)

使用 StringUtils 的 split 方法會(huì)返回 null,而使用 String 的 split 方法會(huì)報(bào)指針異常。

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

給定一個(gè)字符串,要檢查它是否為純數(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

4. 將集合連接成字符串

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

還有很多實(shí)用的方法,這里就不一一介紹了。

六、BeanUtils

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

1. 復(fù)制對(duì)象屬性

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

User user1 = new User();
user1.setId(1L);
user1.setName("Dylan");
user1.setAddress("Hong Kong");
User user2 = new User();
BeanUtils.copyProperties(user1, user2);
System.out.println(user2);

2. 獲取指定類的指定方法

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

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

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

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

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

還有很多實(shí)用的方法,這里就不一一介紹了。

七、ReflectionUtils

有時(shí),我們?cè)陧?xiàng)目中需要使用反射功能。如果使用最原始的方法開發(fā),代碼量會(huì)非常大且麻煩,需要處理大量異常和訪問權(quán)限問題。 好消息是,Spring 為我們提供了一個(gè) ReflectionUtils 工具類,它在 org.springframework.util 包下。

1. 獲取方法

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

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

2. 獲取字段

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

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

3. 執(zhí)行方法

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

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

4. 檢查字段是否為常量

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

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

5. 檢查是否為 equals 方法

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

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

還有很多實(shí)用的方法,這里就不一一介紹了。

八、DigestUtils

有時(shí),我們需要對(duì)數(shù)據(jù)進(jìn)行加密,比如使用 md5 或 sha256。我們可以使用 Apache 的 org.apache.commons.codec.digest 包下的 DigestUtils 類。

1. MD5 加密

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

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

2. SHA256 加密

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

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

這個(gè)工具類還有許多其他加密方法:

九、HttpStatus

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

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

實(shí)際上,org.springframework.http 包下的 HttpStatus 枚舉或 org.apache.http 包下的 HttpStatus 接口已經(jīng)為我們定義了常用的 HTTP 返回碼,我們可以直接使用,真的不需要重新定義。以下是 HttpStatus 類的部分內(nèi)容:

總結(jié)

在這篇文章中,我介紹了 Java 開發(fā)中 9 個(gè)非常實(shí)用的工具類,它們可以幫助我們提高開發(fā)效率,減少重復(fù)代碼,并簡(jiǎn)化日常的開發(fā)任務(wù)。從集合操作到字符串處理,從對(duì)象操作到反射機(jī)制,再到數(shù)據(jù)加密和 HTTP 狀態(tài)碼處理,這些工具類提供了強(qiáng)大而靈活的功能,讓我們能夠更加專注于業(yè)務(wù)邏輯的實(shí)現(xiàn),而不是底層細(xì)節(jié)的處理。

責(zé)任編輯:趙寧寧 來源: 程序猿技術(shù)充電站
相關(guān)推薦

2024-11-28 13:07:33

2016-10-09 20:07:43

2019-08-23 19:22:31

SQL語句效率提升數(shù)據(jù)庫

2024-07-17 08:25:44

2017-04-18 10:36:17

FireFox工具前端開發(fā)

2021-07-16 23:32:28

工具職場(chǎng)軟件

2020-03-29 11:46:16

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

2015-11-10 10:11:32

ios開發(fā)工具效率

2021-12-06 10:07:48

開源項(xiàng)目Vue3

2021-12-17 15:03:50

Python工具代碼

2020-07-25 19:38:54

JavaScriptJavaScript庫Web

2020-09-23 16:51:15

辦公軟件電腦技術(shù)

2025-03-04 13:00:00

JavaScrip代碼語言

2020-07-09 10:02:27

Python開發(fā)工具

2021-04-19 17:12:53

網(wǎng)站工具

2024-05-28 14:36:00

Python開發(fā)

2021-01-13 22:50:21

開發(fā)Web工具

2022-05-30 15:15:17

Python工具數(shù)據(jù)

2025-04-28 10:16:35

VSCode插件開發(fā)

2020-07-15 08:07:39

辦公軟件工具效率
點(diǎn)贊
收藏

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