JAVA之Guava

Guava 是由 Google 开发的一个开源 Java 库,包含了大量被认为是 Java 编程中常用的实用工具类和方法。Guava 提供了丰富的集合处理、缓存、字符串处理、并发工具和 I/O 操作等功能。

1. 集合工具

Guava 提供了强大的集合框架扩展,简化了集合的创建、操作和转换。

**1.1 不可变集合**

不可变集合(Immutable Collections)是一种在创建后不能被修改的集合。Guava 提供了各种不可变集合类型,例如 `ImmutableList`、`ImmutableSet` 和 `ImmutableMap`。

```java
ImmutableList<String> immutableList = ImmutableList.of("a", "b", "c");
ImmutableSet<String> immutableSet = ImmutableSet.of("a", "b", "c");
ImmutableMap<String, Integer> immutableMap = ImmutableMap.of("a", 1, "b", 2);
```

**1.2. 集合工具类**

Guava 提供了一系列工具类来增强 Java 的集合框架,例如 `Lists`、`Sets` 和 `Maps`。

```java
List<String> list = Lists.newArrayList("a", "b", "c");
Set<String> set = Sets.newHashSet("a", "b", "c");
Map<String, Integer> map = Maps.newHashMap();
```

**1.3. Multimap**

`Multimap` 是一种特殊的 Map,可以将一个键映射到多个值。Guava 提供了多种 Multimap 实现,例如 `ArrayListMultimap` 和 `HashMultimap`。

```java
Multimap<String, String> multimap = ArrayListMultimap.create();
multimap.put("fruit", "apple");
multimap.put("fruit", "banana");
multimap.put("vegetable", "carrot");
```

2. 缓存

Guava 的缓存模块提供了一个强大的本地缓存实现,支持多种缓存过期和回收策略。

**2.1. CacheBuilder**

`CacheBuilder` 用于构建缓存实例,可以设置缓存大小、过期时间和回收策略等。

```java
Cache<String, String> cache = CacheBuilder.newBuilder()
    .maximumSize(1000)
    .expireAfterWrite(10, TimeUnit.MINUTES)
    .build();
```

**2.2. CacheLoader**

`CacheLoader` 用于定义缓存加载逻辑,当缓存中没有数据时自动加载。

```java
LoadingCache<String, String> cache = CacheBuilder.newBuilder()
    .maximumSize(1000)
    .expireAfterWrite(10, TimeUnit.MINUTES)
    .build(new CacheLoader<String, String>() {
        public String load(String key) {
            return getDataFromDatabase(key); // 定义加载逻辑
        }
    });
```

3. 字符串处理

Guava 提供了丰富的字符串处理工具类,例如 `Strings` 和 `Splitter`。

**3.1. Strings 工具类**

`Strings` 工具类提供了一些常用的字符串操作方法,例如空值检查、重复、填充等。

```java
boolean isNullOrEmpty = Strings.isNullOrEmpty(str);
String repeated = Strings.repeat("abc", 3); // 结果是 "abcabcabc"
String padded = Strings.padStart("7", 3, '0'); // 结果是 "007"
```

**3.2. Splitter 和 Joiner**

`Splitter` 用于分割字符串,`Joiner` 用于连接字符串。

```java
Iterable<String> parts = Splitter.on(',').trimResults().omitEmptyStrings().split("a, b, c");
String joined = Joiner.on(", ").skipNulls().join("a", null, "b", "c"); // 结果是 "a, b, c"
```

4. 并发工具

Guava 提供了一些并发工具类,例如 `ListenableFuture` 和 `Service` 框架。

**4.1. ListenableFuture**

`ListenableFuture` 是对 JDK `Future` 的扩展,支持回调和组合操作。

```java
ListenableFuture<Integer> future = listeningExecutorService.submit(() -> {
    // 异步任务
    return 42;
});

Futures.addCallback(future, new FutureCallback<Integer>() {
    public void onSuccess(Integer result) {
        System.out.println("Got result: " + result);
    }

    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, MoreExecutors.directExecutor());
```

**4.2. Service 框架**

`Service` 框架提供了构建和管理应用程序服务的基础设施,支持服务生命周期管理。

```java
class MyService extends AbstractIdleService {
    @Override
    protected void startUp() {
        System.out.println("Service is starting up");
    }

    @Override
    protected void shutDown() {
        System.out.println("Service is shutting down");
    }
}

ServiceManager serviceManager = new ServiceManager(ImmutableList.of(new MyService()));
serviceManager.startAsync().awaitHealthy();
```

5. I/O 工具

Guava 的 I/O 模块提供了简化文件和流操作的工具类,例如 `Files` 和 `ByteStreams`。

**5.1. Files 工具类**

`Files` 工具类提供了文件操作的方法,例如读取、写入、复制和移动文件。

```java
List<String> lines = Files.readLines(new File("test.txt"), Charset.defaultCharset());
Files.write("Hello, world!", new File("test.txt"), Charset.defaultCharset());
```

**5.2. ByteStreams 工具类**

`ByteStreams` 提供了操作字节流的方法,例如读取、写入和复制字节流。

```java
byte[] data = ByteStreams.toByteArray(new FileInputStream("test.txt"));
ByteStreams.copy(new FileInputStream("test.txt"), new FileOutputStream("copy.txt"));
```

Guava 是一个强大且灵活的 Java 库,提供了许多实用的工具类和方法,极大地简化了 Java 编程中的常见任务。通过深入了解和使用 Guava,开发者可以提高代码的简洁性、可读性和维护性,并显著提升开发效率。在实际项目中,合理使用 Guava 的各个模块,可以帮助解决各种复杂问题,提升应用程序的质量和性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值