一、JDK自帶工具包 (java.lang*.java.util.*等)
面是Java中jdk中附帶的一些常見工具類及其方法和示例的簡介
工具類?/?類所在包 | 常用方法 | 描述 | 示例 |
Arrays?(java.util) | sort() | 對數組進行排序 | Arrays.sort(arr); |
binarySearch() | 在數組中執行二分查找 | int?index?=?Arrays.binarySearch(arr,?key); | |
equals() | 比較兩個數組內容是否相等 | boolean?isEqual?=?Arrays.equals(arr1,?arr2); | |
fill() | 使用特定值填充數組 | Arrays.fill(arr,?val); | |
toString() | 返回數組內容的字符串表示 | String?arrayString?=?Arrays.toString(arr); | |
ArrayList?(java.util) | add() | 向列表添加元素 | list.add(element); |
remove() | 移除列表中的元素 | list.remove(index); | |
size() | 返回列表中的元素個數 | int?size?=?list.size(); | |
get() | 獲取指定索引位置的元素 | Object?element?=?list.get(index); | |
contains() | 判斷列表是否包含某個元素 | boolean?isPresent?=?list.contains(element); | |
Collections?(java.util) | sort() | 對列表進行排序 | Collections.sort(list); |
reverse() | 反轉列表 | Collections.reverse(list); | |
shuffle() | 隨機排列列表 | Collections.shuffle(list); | |
min()/max() | 查找集合中的最小/最大值 | Object?min?=?Collections.min(collection); | |
synchronizedList() | 返回線程安全的列表 | List?syncList?=?Collections.synchronizedList(list); | |
Math?(java.lang) | abs() | 返回絕對值 | int?absolute?=?Math.abs(-123); |
max()/min() | 返回兩個數中的最大值/最小值 | int?max?=?Math.max(10,?20); | |
sqrt() | 返回平方根 | double?root?=?Math.sqrt(16); | |
pow() | 返回第一個參數的第二個參數次冪 | double?power?=?Math.pow(2,?3); | |
random() | 返回一個隨機數 | double?randomNum?=?Math.random(); | |
SimpleDateFormat?(java.text) | format() | 格式化日期為文本 | String?dateStr?=?new?SimpleDateFormat("yyyy-MM-dd").format(new?Date()); |
parse() | 解析文本以生成日期 | Date?date?=?new?SimpleDateFormat("yyyy-MM-dd").parse("2021-01-01"); | |
UUID?(java.util) | randomUUID() | 生成隨機的唯一標識符 | UUID?id?=?UUID.randomUUID(); |
fromString() | 從字符串中創建UUID | UUID?id?=?UUID.fromString(uuidString); | |
ExecutorService?(java.util.concurrent) | submit() | 提交一個可執行的任務以供執行 | Future?result?=?executor.submit(aCallable); |
invokeAll() | 執行給定的任務集合 | List<Future>?results?=?executor.invokeAll(taskList); | |
shutdown() | 啟動有序關閉 | executor.shutdown(); | |
awaitTermination() | 阻塞直到所有任務在關閉請求后完成執行 | executor.awaitTermination(1,?TimeUnit.MINUTES); | |
Stream?(java.util.stream) | filter() | 對流進行篩選 | stream.filter(e?->?e?>?10).collect(Collectors.toList()); |
map() | 對流中的每個元素應用函數 | stream.map(String::toUpperCase).collect(Collectors.toList()); | |
collect() | 將流轉換成其他形式 | List<Integer>?list?=?stream.collect(Collectors.toList()); | |
forEach() | 遍歷流中的每個元素 | stream.forEach(System.out::println); | |
reduce() | 對流中元素進行歸約 | `int?sum?=?stream |
二、Apache?Commons?相關
Apache?Commons提供的工具類大大簡化了日常編碼任務,使得開發者可以快速高效地處理常見問題
2.1.?相關maven依賴
<!-- Apache Commons Lang -->
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version>
</dependency><!-- Apache Commons IO -->
<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version>
</dependency><!-- Apache Commons Collections -->
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-collections4</artifactId><version>4.4</version>
</dependency>
2.2.?相關類庫以及方法介紹
工具類?/?所屬庫 | 常用方法 | 描述 | 使用示例 |
StringUtils?/?Apache?Commons?Lang | isEmpty() | 檢查字符串是否為空或null | StringUtils.isEmpty(str) |
isNotEmpty() | 檢查字符串是否非空且非null | StringUtils.isNotEmpty(str) | |
join() | 連接數組元素為字符串 | StringUtils.join(array,?',') | |
reverse() | 反轉字符串 | StringUtils.reverse(str) | |
substringBetween() | 獲取兩個字符串之間的子串 | StringUtils.substringBetween(str,?"<tag>",?"</tag>") | |
FileUtils?/?Apache?Commons?IO | readFileToString() | 將文件內容讀取為字符串 | FileUtils.readFileToString(file,?Charset.defaultCharset()) |
writeStringToFile() | 將字符串寫入文件 | FileUtils.writeStringToFile(file,?string,?Charset.defaultCharset()) | |
copyFile() | 復制文件 | FileUtils.copyFile(srcFile,?destFile) | |
deleteQuietly() | 安靜地刪除文件,不拋異常 | FileUtils.deleteQuietly(file) | |
sizeOfDirectory() | 計算目錄大小 | FileUtils.sizeOfDirectory(directory) | |
RandomStringUtils?/?Apache?Commons?Lang | randomAlphabetic() | 生成隨機字母字符串 | RandomStringUtils.randomAlphabetic(5) |
randomNumeric() | 生成隨機數字字符串 | RandomStringUtils.randomNumeric(5) | |
randomAlphanumeric() | 生成隨機字母數字混合字符串 | RandomStringUtils.randomAlphanumeric(5) | |
NumberUtils?/?Apache?Commons?Lang | isCreatable() | 檢查字符串是否能轉換為數字 | NumberUtils.isCreatable("123") |
toInt() | 將字符串轉換為int型數字 | NumberUtils.toInt("5") | |
toDouble() | 將字符串轉換為double型數字 | NumberUtils.toDouble("3.14") | |
max() | 返回多個數字中的最大值 | NumberUtils.max(1,?2,?3) | |
min() | 返回多個數字中的最小值 | NumberUtils.min(1,?2,?3) | |
IOUtils?/?Apache?Commons?IO | toString() | 將輸入流轉換為字符串 | IOUtils.toString(inputStream,?Charset.defaultCharset()) |
copy() | 將輸入流的內容復制到輸出流 | IOUtils.copy(inputStream,?outputStream) | |
toByteArray() | 將輸入流轉換為字節數組 | IOUtils.toByteArray(inputStream) | |
DigestUtils?/?Apache?Commons?Codec | md5Hex() | 對字符串進行MD5散列 | DigestUtils.md5Hex(string) |
sha256Hex() | 對字符串進行SHA-256散列 | DigestUtils.sha256Hex(string) | |
CollectionUtils?/?Apache?Commons?Collections | isEmpty() | 檢查集合是否為空 | CollectionUtils.isEmpty(collection) |
isNotEmpty() | 檢查集合是否非空 | CollectionUtils.isNotEmpty(collection) | |
intersect() | 獲取兩個集合的交集 | CollectionUtils.intersection(a,?b) | |
union() | 獲取兩個集合的并集 | CollectionUtils.union(a,?b) | |
subtract() | 獲取兩個集合的差集(在a中不在b中的元素) | CollectionUtils.subtract(a,?b) | |
DateFormatUtils?/?Apache?Commons?Lang | format() | 格式化日期為字符串 | DateFormatUtils.format(new?Date(),?"yyyy-MM-dd?HH:mm:ss") |
三、Guava?(Google提供的開源工具庫)
Guava是Google提供的一套開源的Java工具庫,它包含了很多質量高效的Java工具類。下面是Guava中一些常用的工具類和方法
3.1.?相關maven依賴
<dependencies><!-- Other dependencies --><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.1-jre</version></dependency><!-- Other dependencies -->
</dependencies>
3.2.?相關類庫以及方法介紹
工具類/類所在包 | 常用方法 | 描述 | 示例 |
Lists?(com.google.common.collect) | newArrayList() | 創建一個ArrayList實例 | List<String>?list?=?Lists.newArrayList(); |
reverse() | 返回一個反轉的列表視圖 | List<String>?reversed?=?Lists.reverse(list); | |
partition() | 把列表分割成指定大小的子列表 | List<List<String>>?parts?=?Lists.partition(list,?2); | |
Maps?(com.google.common.collect) | newHashMap() | 創建一個HashMap實例 | Map<String,?Integer>?map?=?Maps.newHashMap(); |
uniqueIndex() | 對集合中元素進行唯一性索引 | ImmutableMap<String,?String>?index?=?Maps.uniqueIndex(list,?keyFunction); | |
filterKeys() | 返回一個滿足特定鍵條件的Map視圖 | Map<String,?Integer>?filteredMap?=?Maps.filterKeys(map,?Predicates.notNull()); | |
Sets?(com.google.common.collect) | newHashSet() | 創建一個HashSet實例 | Set<String>?set?=?Sets.newHashSet(); |
intersection() | 返回兩個集合的交集 | Set<String>?common?=?Sets.intersection(set1,?set2); | |
difference() | 返回兩個集合的差集 | Set<String>?diff?=?Sets.difference(set1,?set2); | |
union() | 返回兩個集合的并集 | Set<String>?union?=?Sets.union(set1,?set2); | |
Multimap?(com.google.common.collect) | ArrayListMultimap.create() | 創建一個多值Map實例 | Multimap<String,?Integer>?multimap?=?ArrayListMultimap.create(); |
put() | 向Multimap添加鍵值對 | multimap.put(key,?value); | |
get() | 根據鍵獲取值集合 | Collection<Integer>?values?=?multimap.get(key); | |
values() | 獲取所有值的集合 | Collection<Integer>?allValues?=?multimap.values(); | |
Cache?(com.google.common.cache) | CacheBuilder.newBuilder() | 創建一個Cache實例 | LoadingCache<Key,?Graph>?graphs?=?CacheBuilder.newBuilder().build(loader); |
put() | 向Cache中添加一個元素 | cache.put(key,?value); | |
getIfPresent() | 如果存在則獲取元素 | Graph?g?=?cache.getIfPresent(key); | |
get() | 獲取緩存中的元素,不存在則使用Loader加載 | Graph?g?=?cache.get(key); | |
invalidate() | 從緩存中移除元素 | cache.invalidate(key); | |
Preconditions?(com.google.common.base) | checkNotNull() | 檢查對象是否為null | Preconditions.checkNotNull(value); |
checkArgument() | 檢查表達式是否為真 | Preconditions.checkArgument(i?>=?0); | |
checkState() | 檢查對象的狀態 | Preconditions.checkState(validateObjectState()); | |
checkElementIndex() | 檢查索引是否有效 | Preconditions.checkElementIndex(index,?size); | |
Strings?(com.google.common.base) | isNullOrEmpty() | 檢查字符串是否為null或空 | boolean?isNullOrEmpty?=?Strings.isNullOrEmpty(input); |
nullToEmpty() | 如果字符串為null,返回空字符串 | String?safeString?=?Strings.nullToEmpty(input); | |
emptyToNull() | 如果字符串為空,返回null | String?nullableString?=?Strings.emptyToNull(input); | |
padEnd() | 將字符串擴展到特定長度 | String?padded?=?Strings.padEnd(input,?minLength,?padChar); | |
padStart() | 在字符串前添加字符直到特定長度 | String?padded?=?Strings.padStart(input,?minLength,?padChar); | |
RateLimiter(com.google.common.util. concurrent) | RateLimiter.create(double?permitsPerSecond) | 創建一個RateLimiter實例 | RateLimiter?rateLimiter?=?RateLimiter.create(2.0); |
rateLimiter.acquire() | 請求一個許可,如果許可可用,則立即返回 | rateLimiter.acquire(); | |
rateLimiter.acquire(int?permits) | 請求指定數量的許可,如果許可可用,則立即返回 | rateLimiter.acquire(2); | |
rateLimiter.tryAcquire() | 嘗試獲取一個許可,如果許可可用,則返回true | boolean?acquired?=?rateLimiter.tryAcquire(); | |
rateLimiter.tryAcquire(int?permits) | 嘗試獲取指定數量的許可,如果許可可用,則返回true | boolean?acquired?=?rateLimiter.tryAcquire(3); |
3.2.1.關于限流RateLimiter
下面是一個完整的示例
import com.google.common.util.concurrent.RateLimiter;public class Example {public static void main(String[] args) {RateLimiter rateLimiter = RateLimiter.create(2.0); // 創建一個每秒允許2個許可的RateLimiter實例// 請求一個許可,如果許可可用,則立即返回rateLimiter.acquire();System.out.println("Task 1 executed");// 請求指定數量的許可,如果許可可用,則立即返回rateLimiter.acquire(2);System.out.println("Task 2 executed");// 嘗試獲取一個許可,如果許可可用,則返回trueboolean acquired = rateLimiter.tryAcquire();System.out.println("Task 3 acquired: " + acquired);// 嘗試獲取指定數量的許可,如果許可可用,則返回trueacquired = rateLimiter.tryAcquire(3);System.out.println("Task 4 acquired: " + acquired);}
}