- 为了更好地理解Guava库中的常用方法,以下是一个表格形式的总结,包括方法名称、所属类、功能描述和使用场景:
一、简介
-
Google Guava库是由Google开发的一个Java开源库,它提供了许多实用的工具类和方法,旨在帮助开发者编写更加简洁、高效和可维护的代码。
-
Guava库的主要目的是简化Java编程中的一些常见任务,如集合操作、缓存、函数式编程支持等,同时提供了一系列性能优化和设计模式的最佳实践。
二、Guava库的依赖配置
为了在项目中使用Guava库,首先需要将其作为依赖添加到项目中。以下是不同构建工具的配置方法:
Maven依赖配置示例:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.0.1-jre</version> <!-- 请根据需要选择适合的版本号 -->
</dependency>
Gradle依赖配置示例:
implementation 'com.google.guava:guava:31.0.1-jre' // 请根据需要选择适合的版本号
注意:版本号会随着Guava库的更新而变化,因此在实际使用时应根据项目需求选择合适的版本。例如,如果项目需要在Android上运行,则应选择带有-android
后缀的版本,如31.0.1-android
。
三、常用方法和类
Guava库中包含了大量的实用方法和类,以下是一些常用的类别及其功能:
Preconditions
类:用于参数检查,避免null值和不合法的参数值传入方法。
Collections2
类:扩展了JDK的Collections
类,提供了额外的集合操作方法,如filter
,frequency
,intersection
等。
Iterables
类:提供对Iterable
接口的扩展,如concat
,zip
,limit
,skip
等方法。
Lists
类:提供创建和操作List
的静态方法,如newArrayList
,reverse
,partition
等。
Maps
类:提供创建和操作Map
的静态方法,如newHashMap
,uniqueIndex
,filterKeys
等。
Function
类:表示一个接受单一输入参数并产生结果的功能接口,常用于函数式编程风格的方法链。
ImmutableCollection
类:不可变集合类,用于创建不可修改的集合对象,如ImmutableList
,ImmutableSet
等。
CacheBuilder
类:提供了一个简单的缓存构建器,可以快速创建具有自动加载和过期策略的缓存实现。
Objects
类:提供了一组静态方法来操作或处理对象,如requireNonNull
,toStringHelper
等。
Strings
类:提供了一系列字符串操作的静态方法,如isNullOrEmpty
,join
,padStart
等。
BaseEncoding
类:提供了字符集编码转换的方法,如base64()
方法用于Base64编码和解码。
EventBus
类:实现了发布-订阅模式的事件总线,用于组件间的解耦通信。
ListenableFuture
接口:表示一个可以注册回调的异步计算结果,与Future
类似但增加了监听能力。
四、使用示例
4.1.Collections2.filter
使用Lists.newArrayList
创建一个列表,然后通过Collections2.filter
过滤出其中的偶数元素:
List<Integer> numbers = Lists.newArrayList(1, 2, 3, 4, 5, 6);
List<Integer> evenNumbers = Collections2.filter(numbers, new Predicate<Integer>() {
@Override
public boolean apply(Integer number) {
return number % 2 == 0;
}
});
System.out.println(evenNumbers); // 输出 [2, 4, 6]
4.2. 使用EventBus
进行解耦的消息传递
class MessageListener {
@Subscribe
public void onMessageReceived(String message) {
System.out.println("Received message: " + message);
}
}
EventBus eventBus = new EventBus();
eventBus.register(new MessageListener());
eventBus.post("Hello, World!"); // MessageListener会接收到这个消息并打印出来
4.3. 使用CacheBuilder
构建一个简单的缓存
LoadingCache<String, String> cache = CacheBuilder.newBuilder()
.maximumSize(100) // 设置最大容量
.expireAfterWrite(10, TimeUnit.MINUTES) // 设置写入后10分钟过期
.build(new CacheLoader<String, String>() {
@Override
public String load(String key) throws Exception {
return key + " loaded from database";
}
});
String result = cache.get("key"); // 如果"key"不在缓存中,则会调用load方法加载数据
System.out.println(result); // 输出 "key loaded from database"
4.4. 使用Maps
的uniqueIndex
方法根据键值对生成映射
List<Person> people = Arrays.asList(new Person("Alice"), new Person("Bob"));
ImmutableMap<String, Person> nameToPersonMap = Maps.uniqueIndex(people, Person::getName);
System.out.println(nameToPersonMap); // 输出 {Alice=Person{name='Alice'}, Bob=Person{name='Bob'}}
五、常用方法汇总
方法名称 | 所属类 | 功能描述 | 使用场景 |
---|---|---|---|
checkNotNull | Preconditions | 检查参数是否为null,如果为null则抛出异常 | 参数验证 |
filter | Collections2 | 根据提供的谓词条件筛选集合中的元素 | 集合元素筛选 |
reverse | Lists | 反转列表的顺序 | 数据处理 |
uniqueIndex | Maps | 根据提供的键值对生成一个不可变的映射 | 映射生成 |
of | ImmutableList | 创建一个不可变的列表 | 不可变集合创建 |
of | ImmutableSet | 创建一个不可变的集合 | 不可变集合创建 |
newHashMap | Maps | 创建一个新的HashMap实例 | 映射创建 |
toBase64 | BaseEncoding | 将字节数组转换为Base64编码的字符串 | 数据编码转换 |
register | EventBus | 注册事件监听器 | 事件监听 |
post | EventBus | 发布事件到所有已注册的监听器 | 消息发布 |
get | Cache | 从缓存中获取键对应的值,如果不存在则通过提供的加载器加载 | 缓存查询和加载 |
requireNonNull | Objects | 检查对象是否为null,如果为null则抛出异常 | 对象非空验证 |
join | Strings | 将字符串数组或集合连接成一个单一的字符串 | 字符串拼接 |
isNullOrEmpty | Strings | 检查字符串是否为null或空 | 字符串判空 |
format | Strings | 根据指定的格式字符串和参数生成格式化后的字符串 | 字符串格式化 |
equalsAndHashCode | Objects | 生成两个对象的相等性比较和hashCode方法 | 对象比较和哈希计算 |
toImmutableList | Lists | 将现有的列表包装成不可变的列表 | 不可变集合转换 |
toImmutableMap | Maps | 将现有的映射转换成不可变的映射 | 不可变映射转换 |
transform | Function | 对输入参数应用给定的函数并返回结果 | 函数式编程 |
asList | Iterables | 将Iterable转换为List | Iterable转List |
partition | Lists | 根据提供的谓词将列表分成两部分 | 列表分割 |
limit | Iterables | 返回Iterable的前N个元素 | 元素限制 |
skip | Iterables | 跳过Iterable的前N个元素 | 元素跳过 |
frequency | Collections2 | 返回集合中某个值的出现次数 |