Guava库:强大的java工具类库

  • 为了更好地理解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. 使用MapsuniqueIndex方法根据键值对生成映射

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'}}

五、常用方法汇总

方法名称所属类功能描述使用场景
checkNotNullPreconditions检查参数是否为null,如果为null则抛出异常参数验证
filterCollections2根据提供的谓词条件筛选集合中的元素集合元素筛选
reverseLists反转列表的顺序数据处理
uniqueIndexMaps根据提供的键值对生成一个不可变的映射映射生成
ofImmutableList创建一个不可变的列表不可变集合创建
ofImmutableSet创建一个不可变的集合不可变集合创建
newHashMapMaps创建一个新的HashMap实例映射创建
toBase64BaseEncoding将字节数组转换为Base64编码的字符串数据编码转换
registerEventBus注册事件监听器事件监听
postEventBus发布事件到所有已注册的监听器消息发布
getCache从缓存中获取键对应的值,如果不存在则通过提供的加载器加载缓存查询和加载
requireNonNullObjects检查对象是否为null,如果为null则抛出异常对象非空验证
joinStrings将字符串数组或集合连接成一个单一的字符串字符串拼接
isNullOrEmptyStrings检查字符串是否为null或空字符串判空
formatStrings根据指定的格式字符串和参数生成格式化后的字符串字符串格式化
equalsAndHashCodeObjects生成两个对象的相等性比较和hashCode方法对象比较和哈希计算
toImmutableListLists将现有的列表包装成不可变的列表不可变集合转换
toImmutableMapMaps将现有的映射转换成不可变的映射不可变映射转换
transformFunction对输入参数应用给定的函数并返回结果函数式编程
asListIterables将Iterable转换为ListIterable转List
partitionLists根据提供的谓词将列表分成两部分列表分割
limitIterables返回Iterable的前N个元素元素限制
skipIterables跳过Iterable的前N个元素元素跳过
frequencyCollections2返回集合中某个值的出现次数

 

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进朱者赤

多多支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值