一、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 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 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, "", "")
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 list = Lists.newArrayList();
reverse()
返回一个反转的列表视图
List reversed = Lists.reverse(list);
partition()
把列表分割成指定大小的子列表
List<List> 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 set = Sets.newHashSet();
intersection()
返回两个集合的交集
Set common = Sets.intersection(set1, set2);
difference()
返回两个集合的差集
Set diff = Sets.difference(set1, set2);
union()
返回两个集合的并集
Set 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 values = multimap.get(key);
values()
获取所有值的集合
Collection 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);
}
}