Google Guava

一、什么是Guava
1)Guava库是一个适合很多Java项目的通用工具库
2)Guava工具库中包含了:集合Collection、并发Concurrency、原语Primitive、反射Reflection、比较Comparison、I/O操作、哈希Hash、网络Networking、字符串String、数学函数Math、缓存Caching、内存中的发布/订阅……以及各种级别的数据类型
3)需要JDK 6以上版本

二、函数接口
在深入Guava库之前,我们先了解其函数接口,了解这些函数接口有助于我们更好地掌握Guava库。

函数接口:
1)函数接口是定义了单个方法的接口
2)函数接口包含了众所周知的单个抽象方法(SAM,Single Abstract Method)
3)函数接口为Java 8 Lambda表达式提供了基础
函数接口是很酷的:你指定任何一个接口都可以作为方法参数,还可以在Java 8中传递Lambda表达式
4)函数接口可以被当作回调对象

三、函数接口的一些例子
下面的例子是Java 8的函数接口。

1、函数接口带单个方法参数

点击(此处)折叠或打开

  1. @FunctionalInterface{
  2.     public boolean check(Order o);
  3. }

接着我们可以创建Lambda表达式,使用上面的函数接口。

点击(此处)折叠或打开

  1. IOrder newOrder = (Order o) -> o.getStatus().equals("NEW");
  2. //或者
  3. IOrder newOrder = (o) ->o.getStatus().equals("NEW");

说明:
1)表达式右边是一个简单的检查方法的内容——检查传递到Order对象的状态。
2)当创建了大量能表达需求行为或功能的Lambda表达式后,Lambda表达式的威力才能体现出来。

2、再举个例子,紧接上面的例子,找出大额订单。

点击(此处)折叠或打开

  1. // Lambda表达式找出大额订单
  2. IOrder bigOrderLambda = (Order o) -> o.getQuantity() > 10000000;

  3. // Lambda表达式找出新的大额订单
  4. ITrade issuerBigNewTradeLambda = (o) -> {
  5.     return o.getIssuer().equals("Honda") &&
  6.         o.getQuantity() > 10000000 &&
  7.         o.getStatus().equals("NEW");
  8. }

四、总结
Google Guava库在"com.google.common.base"中提供了几个很有用的SAM,包括:
1)Function
指定了一个接收“T”类型实例并返回“R”类型实例的方法
2)Predicate
指定了一个传递“T”类型实例并返回布尔类型的方法
3)Supplier
指定了一个能够返回值的方法

还需要知道,这些SAM虽然诞生于Guava库,但是也加入了Java 8。
### Google Guava 库概述 Google Guava 是由 Google 开发的一组 Java 核心库,旨在简化常见的编程任务并提供高质量的工具类集合。它包含了丰富的功能模块,例如集合扩展、缓存支持、并发原语以及字符串处理等功能[^2]。 Guava 的设计目标是通过引入经过验证的最佳实践来减少重复代码量,并提高开发效率和代码质量。其核心特性之一是对标准 JDK 功能的有效补充和支持。 以下是关于 Guava 库的一些重要特性和使用示例: --- ### 集合扩展 Guava 提供了许多增强的标准集合接口实现,比如 `ImmutableList` 和 `Multiset` 等。这些数据结构可以显著提升程序性能和可读性。 #### 使用示例 ```java import com.google.common.collect.ImmutableList; public class Example { public static void main(String[] args) { ImmutableList<String> immutableList = ImmutableList.of("a", "b", "c"); System.out.println(immutableList); // 输出不可变列表 [a, b, c] } } ``` 上述代码展示了如何创建一个不可变列表,这种类型的集合一旦初始化便无法修改,非常适合用于多线程环境下的安全共享[^3]。 --- ### 缓存机制 Guava 还提供了轻量级的本地缓存解决方案——`CacheBuilder`,它可以轻松构建具有过期策略和大小限制的功能强大的缓存实例。 #### 使用示例 ```java import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import java.util.concurrent.TimeUnit; public class CacheExample { public static void main(String[] args) throws Exception { Cache<Object, Object> cache = CacheBuilder.newBuilder() .maximumSize(100) .expireAfterWrite(10, TimeUnit.MINUTES) .build(); cache.put("key", "value"); System.out.println(cache.getIfPresent("key")); // 输出 value } } ``` 此片段演示了如何配置最大容量为 100 条记录且写入后 10 分钟自动失效的缓存对象[^4]。 --- ### 并发支持 为了更好地应对复杂的并发场景,Guava 增加了一些实用的数据结构和服务,如 `Striped` 锁条带化器和原子引用更新操作符等。 #### 使用示例 ```java import com.google.common.util.concurrent.Striped; public class StripedLockExample { private final Striped<Lock> locks = Striped.lock(16); public void performOperation(Object key) { Lock lock = locks.get(key); lock.lock(); try { // 执行受保护的操作... } finally { lock.unlock(); } } } ``` 这里定义了一个基于键值隔离锁定逻辑的方法,能够有效降低锁竞争带来的开销[^5]。 --- ### 字符串处理 对于频繁使用的字符串拼接或分割需求,Guava 同样给出了简洁优雅的办法,像 `Joiner` 和 `Splitter` 就是非常典型的例子。 #### 使用示例 ```java import com.google.common.base.Joiner; import com.google.common.base.Splitter; public class StringProcessingExample { public static void main(String[] args) { Joiner joiner = Joiner.on(", ").skipNulls(); String result = joiner.join(new String[]{"apple", null, "banana"}); System.out.println(result); // 输出 apple, banana Iterable<String> parts = Splitter.on(',').trimResults().omitEmptyStrings() .split("foo , bar,, qux "); System.out.println(parts); // 输出 [foo, bar, qux] } } ``` 以上分别介绍了如何跳过空值连接数组元素以及按逗号分隔字符串的同时去除多余空白字符[^6]。 --- ### 官方文档链接 官方维护了一份详尽的技术手册,涵盖了 API 参考指南与最佳实践建议等内容,强烈推荐开发者深入学习以充分发挥该框架的优势: [https://github.com/google/guava/wiki](https://github.com/google/guava/wiki)[^7] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值