Guava 是一个开源的 Java 工具库,提供了一系列实用的工具类和函数,旨在简化 Java 编程过程中的常见任务。以下是 Guava 的使用指南:

  1. 引入 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'
    
  2. 常用的 Guava 工具类:

    • Lists:提供了创建、操作和处理列表的工具方法。
    • Sets:提供了创建、操作和处理集合的工具方法。
    • Maps:提供了创建、操作和处理映射(Map)的工具方法。
    • Strings:提供了处理字符串的工具方法,如拆分、连接、填充等。
    • Files:提供了处理文件的工具方法,如读取、写入、拷贝、删除等。
  3. Guava 新特性与功能:

    • 不可变集合:Guava 提供了不可变的集合类,这些集合在创建后不能被修改,保证了数据的安全性和线程安全性。
    • 函数式风格:Guava 引入了函数式风格的编程,包括函数接口、函数组合、流式操作等,使代码更简洁、易读、易维护。
    • 缓存:Guava 提供了内存缓存的实现,可用于缓存计算和频繁访问的数据,提高性能。
    • EventBus:Guava 的 EventBus 是一个发布-订阅模式的事件总线,用于解耦事件的发布和处理。
  4. 示例代码:
    这里是使用 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!
    
  5. 字符串处理:
    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):在字符串结尾填充指定字符,使其达到指定长度。
  6. 集合工具:
    Guava 的 ListsSets 类提供了各种集合相关的工具方法。

    • Lists.newArrayList(E...):创建一个可变的 ArrayList。
    • Sets.newHashSet(E...):创建一个可变的 HashSet。
    • Lists.reverse(List):反转列表中元素的顺序。
    • Sets.union(Set, Set):合并两个集合,返回包含两个集合中所有元素的新集合。
    • Lists.partition(List, int):将列表分隔为指定大小的子列表。
  7. 缓存:
    Guava 的缓存库允许通过将数据缓存在内存中来提高应用程序的性能。

    • 使用 CacheBuilder 创建一个缓存对象。
    • 可以设置缓存的最大容量、过期时间、并发级别等属性。
    • 可以通过 put(key, value) 方法将数据放入缓存中,通过 get(key) 方法从缓存中获取数据。
  8. EventBus:
    Guava 的 EventBus 是一个轻量级的事件总线,用于解耦事件的发布者和订阅者。使用 EventBus 可以简化事件驱动的编程模型。

    • 创建一个 EventBus 对象。
    • 定义事件类型和对应的事件处理方法。
    • 注册订阅者,并使用 @Subscribe 注解标记事件处理方法。
    • 通过调用 post(event) 方法发布事件。

    订阅者会接收到发布的事件,并执行相应的处理方法。

  9. 文件和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):删除文件。
  10. 集合工具类:
    Guava 提供了许多集合的工具类,用于方便地操作和处理集合对象。

    • Iterables 类提供了对迭代器和可迭代对象进行操作的方法,如过滤、转换、合并等。
    • Multimaps 类提供了多值映射的方法,用于操作键可关联多个值的集合。
    • Range 类提供了用于表示和操作连续范围的工具方法,比如整数范围和字符范围。
    • BiMap 接口提供了双向映射的功能,即可以通过键获取值,也可以通过值获取键,保证键和值的唯一性。
    • Table 接口提供了二维表格的功能,可以通过行和列组合来获取数据。
  11. 并发工具类:
    Guava 提供了一些并发编程的工具类,简化了多线程编程的复杂性。

    • ListenableFuture 接口是 java.util.concurrent.Future 的扩展,可在任务完成时触发回调。
    • Futures 类提供了处理 ListenableFuture 的工具方法,包括转换、组合、异常处理等。
    • RateLimiter 类提供了平滑限流的功能,用于控制一段代码的执行频率。
    • Monitor 类提供了更高级别的监视器锁,用于管理对象的状态和同步访问。
  12. 验证和前置条件:
    Guava 的 Preconditions 类提供了一系列用于验证参数和对象状态的方法,用于提前检查错误条件。

    • checkArgument(boolean):检查条件是否为真,不为真则抛出 IllegalArgumentException
    • checkNotNull(T):检查对象是否为null,为null则抛出 NullPointerException
    • checkState(boolean):检查对象状态是否合法,不合法则抛出 IllegalStateException

总结:
Guava 是一个功能强大且全面的 Java 工具库,提供了许多实用的工具类和函数,涵盖了字符串处理、集合操作、文件和IO操作、并发编程、参数验证等方面。通过使用 Guava,你可以提高代码的效率、可读性和可维护性,简化开发过程,并处理常见的编程任务。详细了解和使用 Guava,可以查阅 Guava 的官方文档和示例代码,以满足你的具体需求。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐