一、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"); // 尝试获取一个许可,如果许可可用,则返回true boolean acquired = rateLimiter.tryAcquire(); System.out.println("Task 3 acquired: " + acquired); // 尝试获取指定数量的许可,如果许可可用,则返回true acquired = rateLimiter.tryAcquire(3); System.out.println("Task 4 acquired: " + acquired); } }