Guava 是一个开源的 Java 工具库,提供了一系列实用的工具类和函数,旨在简化 Java 编程过程中的常见任务。以下是 Guava 的使用指南:
-
引入 Guava:
要开始使用 Guava,首先需要将 Guava 库添加到项目的依赖中。你可以在项目的构建文件(如 Maven 的 pom.xml 或 Gradle 的 build.gradle)中添加相应的依赖。Maven 依赖:
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>30.1-jre</version> </dependency>
Gradle 依赖:
implementation 'com.google.guava:guava:30.1-jre'
-
常用的 Guava 工具类:
Lists
:提供了创建、操作和处理列表的工具方法。Sets
:提供了创建、操作和处理集合的工具方法。Maps
:提供了创建、操作和处理映射(Map)的工具方法。Strings
:提供了处理字符串的工具方法,如拆分、连接、填充等。Files
:提供了处理文件的工具方法,如读取、写入、拷贝、删除等。
-
Guava 新特性与功能:
- 不可变集合:Guava 提供了不可变的集合类,这些集合在创建后不能被修改,保证了数据的安全性和线程安全性。
- 函数式风格:Guava 引入了函数式风格的编程,包括函数接口、函数组合、流式操作等,使代码更简洁、易读、易维护。
- 缓存:Guava 提供了内存缓存的实现,可用于缓存计算和频繁访问的数据,提高性能。
- EventBus:Guava 的 EventBus 是一个发布-订阅模式的事件总线,用于解耦事件的发布和处理。
-
示例代码:
这里是使用 Guava 的一个简单示例,演示了如何使用 Guava 的一些常用工具类:import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.google.common.base.Strings; import java.util.List; import java.util.Set; public class GuavaExample { public static void main(String[] args) { // 创建列表 List<String> list = Lists.newArrayList("apple", "banana", "orange"); System.out.println("List: " + list); // 创建集合 Set<Integer> set = Sets.newHashSet(1, 2, 3); System.out.println("Set: " + set); // 字符串处理 String str = " Hello, Guava! "; String trimmed = Strings.nullToEmpty(str).trim(); System.out.println("Trimmed String: " + trimmed); } }
使用上述代码运行后,你将看到输出结果:
List: [apple, banana, orange] Set: [1, 2, 3] Trimmed String: Hello, Guava!
-
字符串处理:
Guava 的Strings
类提供了各种字符串处理的工具方法,例如:Strings.isNullOrEmpty(String)
:判断字符串是否为null或空字符串。Strings.nullToEmpty(String)
:将null转换为空字符串。Strings.repeat(String, int)
:重复指定字符串多次。Strings.commonPrefix(String, String)
:获取两个字符串的共同前缀。Strings.commonSuffix(String, String)
:获取两个字符串的共同后缀。Strings.padStart(String, int, char)
:在字符串开头填充指定字符,使其达到指定长度。Strings.padEnd(String, int, char)
:在字符串结尾填充指定字符,使其达到指定长度。
-
集合工具:
Guava 的Lists
和Sets
类提供了各种集合相关的工具方法。Lists.newArrayList(E...)
:创建一个可变的 ArrayList。Sets.newHashSet(E...)
:创建一个可变的 HashSet。Lists.reverse(List)
:反转列表中元素的顺序。Sets.union(Set, Set)
:合并两个集合,返回包含两个集合中所有元素的新集合。Lists.partition(List, int)
:将列表分隔为指定大小的子列表。
-
缓存:
Guava 的缓存库允许通过将数据缓存在内存中来提高应用程序的性能。- 使用
CacheBuilder
创建一个缓存对象。 - 可以设置缓存的最大容量、过期时间、并发级别等属性。
- 可以通过
put(key, value)
方法将数据放入缓存中,通过get(key)
方法从缓存中获取数据。
- 使用
-
EventBus:
Guava 的EventBus
是一个轻量级的事件总线,用于解耦事件的发布者和订阅者。使用EventBus
可以简化事件驱动的编程模型。- 创建一个
EventBus
对象。 - 定义事件类型和对应的事件处理方法。
- 注册订阅者,并使用
@Subscribe
注解标记事件处理方法。 - 通过调用
post(event)
方法发布事件。
订阅者会接收到发布的事件,并执行相应的处理方法。
- 创建一个
-
文件和IO操作:
Guava 的Files
类提供了处理文件和IO操作的工具方法。Files.asByteSource(File)
:将文件包装成ByteSource
对象,用于读取文件的字节。Files.asCharSource(File, Charset)
:将文件包装成CharSource
对象,用于读取文件的字符。Files.asByteSink(File)
:将文件包装成ByteSink
对象,用于写入字节到文件。Files.asCharSink(File, Charset)
:将文件包装成CharSink
对象,用于写入字符到文件。Files.copy(File, File)
:复制文件。Files.move(File, File)
:移动文件或重命名文件。Files.delete(File)
:删除文件。
-
集合工具类:
Guava 提供了许多集合的工具类,用于方便地操作和处理集合对象。Iterables
类提供了对迭代器和可迭代对象进行操作的方法,如过滤、转换、合并等。Multimaps
类提供了多值映射的方法,用于操作键可关联多个值的集合。Range
类提供了用于表示和操作连续范围的工具方法,比如整数范围和字符范围。BiMap
接口提供了双向映射的功能,即可以通过键获取值,也可以通过值获取键,保证键和值的唯一性。Table
接口提供了二维表格的功能,可以通过行和列组合来获取数据。
-
并发工具类:
Guava 提供了一些并发编程的工具类,简化了多线程编程的复杂性。ListenableFuture
接口是java.util.concurrent.Future
的扩展,可在任务完成时触发回调。Futures
类提供了处理ListenableFuture
的工具方法,包括转换、组合、异常处理等。RateLimiter
类提供了平滑限流的功能,用于控制一段代码的执行频率。Monitor
类提供了更高级别的监视器锁,用于管理对象的状态和同步访问。
-
验证和前置条件:
Guava 的Preconditions
类提供了一系列用于验证参数和对象状态的方法,用于提前检查错误条件。checkArgument(boolean)
:检查条件是否为真,不为真则抛出IllegalArgumentException
。checkNotNull(T)
:检查对象是否为null,为null则抛出NullPointerException
。checkState(boolean)
:检查对象状态是否合法,不合法则抛出IllegalStateException
。
总结:
Guava 是一个功能强大且全面的 Java 工具库,提供了许多实用的工具类和函数,涵盖了字符串处理、集合操作、文件和IO操作、并发编程、参数验证等方面。通过使用 Guava,你可以提高代码的效率、可读性和可维护性,简化开发过程,并处理常见的编程任务。详细了解和使用 Guava,可以查阅 Guava 的官方文档和示例代码,以满足你的具体需求。