一、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);
}
}