guava里常用功能

guava 是 Google 提供的一个 Java 库,提供了很多实用的工具类和方法,可以帮助开发者更高效地编写代码。以下是一些常用的 Guava 工具类及其功能示例:

1. Lists

用于操作列表的工具类。

复制代码
import com.google.common.collect.Lists;

List<Integer> numbers = Lists.newArrayList(1, 2, 3, 4, 5);
List<List<Integer>> partitions = Lists.partition(numbers, 2);
// partitions: [[1, 2], [3, 4], [5]]

2. Maps

用于操作映射的工具类。

复制代码
import com.google.common.collect.Maps;

Map<String, Integer> map = Maps.newHashMap();
map.put("apple", 1);
map.put("banana", 2);
Map<String, Integer> immutableMap = Maps.immutableEnumMap(map);
// 创建不可变的映射

3. Sets

用于操作集合的工具类。

复制代码
import com.google.common.collect.Sets;

Set<String> set1 = Sets.newHashSet("a", "b", "c");
Set<String> set2 = Sets.newHashSet("b", "c", "d");
Set<String> union = Sets.union(set1, set2);
// union: [a, b, c, d]

4. Optional

用于处理可能为空的值。

复制代码
import com.google.common.base.Optional;

Optional<String> optional = Optional.fromNullable(null);
if (optional.isPresent()) {
    System.out.println(optional.get());
} else {
    System.out.println("值为空");
}

5. Strings

字符串操作的工具类。

复制代码
import com.google.common.base.Strings;

String str = "Hello, World!";
String padded = Strings.padStart(str, 20, '*');
// padded: "*******Hello, World!"

6. Joiner

用于连接字符串的工具类。

复制代码
import com.google.common.base.Joiner;

List<String> list = Arrays.asList("a", "b", "c");
String joined = Joiner.on(", ").join(list);
// joined: "a, b, c"

7. Splitter

用于分割字符串的工具类。

复制代码
import com.google.common.base.Splitter;

String csv = "apple, banana, cherry";
Iterable<String> fruits = Splitter.on(", ").split(csv);
// fruits: ["apple", "banana", "cherry"]

8. Preconditions

用于参数检查的工具类。

复制代码
import com.google.common.base.Preconditions;

public void setAge(int age) {
    Preconditions.checkArgument(age > 0, "年龄必须大于0");
    // 其他逻辑
}

9. Functional Programming

Guava 还支持函数式编程风格。

复制代码
import com.google.common.base.Function;
import com.google.common.collect.Lists;

List<String> names = Lists.newArrayList("Alice", "Bob", "Charlie");
List<Integer> nameLengths = Lists.transform(names, new Function<String, Integer>() {
    @Override
    public Integer apply(String name) {
        return name.length();
    }
});
// nameLengths: [5, 3, 7]

10.Immutable:不可变对象工具类

复制代码
import com.google.common.base.ImmutableList;
import com.google.common.base.ImmutableMap;

public class ImmutableExample {
    public static void main(String[] args) {
        // 创建一个不可变列表
        ImmutableList<String> immutableList = ImmutableList.of("apple", "banana", "cherry");

        // 创建一个不可变映射
        ImmutableMap<String, String> immutableMap = ImmutableMap.of(
                "key1", "value1",
                "key2", "value2"
        );

        // 打印不可变对象
        System.out.println(immutableList);
        System.out.println(immutableMap);
    }
}

11.Cache:缓存工具类

复制代码
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;

public class CacheExample {
    public static void main(String[] args) {
        // 创建一个缓存,设置缓存的大小为 10 个元素,缓存的过期时间为 10 秒
        LoadingCache<String, String> cache = CacheBuilder.newBuilder()
              .maximumSize(10)
              .expireAfterWrite(10, TimeUnit.SECONDS)
              .build(new CacheLoader<String, String>() {
                    @Override
                    public String load(String key) throws Exception {
                        // 从数据库或其他数据源中加载数据
                        return "Value for " + key;
                    }
                });

        // 向缓存中添加元素
        cache.put("key1", "value1");
        cache.put("key2", "value2");

        // 获取缓存中的元素
        String value1 = cache.get("key1");
        String value2 = cache.get("key2");

        // 打印缓存中的元素
        System.out.println("Value for key1: " + value1);
        System.out.println("Value for key2: " + value2);
    }
}

以上只是 Guava 提供的一部分功能,实际上这个库还有很多其他强大的工具类,能帮助你更高效地处理集合、字符串、并发等问题。你可以根据具体需求查阅 Guava 的官方文档 以获取更多信息。

相关推荐
赋创小助手4 小时前
融合与跃迁:NVIDIA、Groq 与下一代 AI 推理架构的博弈与机遇
服务器·人工智能·深度学习·神经网络·语言模型·自然语言处理·架构
电商API&Tina5 小时前
跨境电商 API 对接指南:亚马逊 + 速卖通接口调用全流程
大数据·服务器·数据库·python·算法·json·图搜索算法
IT19955 小时前
Qt笔记-使用SSH2进行远程连接linux服务器并上传文件
linux·服务器·笔记
北京盟通科技官方账号6 小时前
工业通讯底层对齐:EtherNet/IP Class 1 连接中的 32-bit Header 与内存映射逻辑
服务器·网络·网络协议·自动化·制造
lengjingzju6 小时前
一网打尽Linux IPC(三):System V IPC
linux·服务器·c语言
Secede.8 小时前
Windows + WSL2 + Docker + CudaToolkit:深度学习环境配置
windows·深度学习·docker
SoveTingღ8 小时前
【问题解析】我的客户端与服务器交互无响应了?
服务器·c++·qt·tcp
zhougl9968 小时前
Vuex 模块命名冲突:问题解析与完整解决方案
linux·服务器·apache
禾叙_9 小时前
【ollama】同一WiFi下Mac访问Windows Ollama失败?完整调试指南(从Connection refused到成功连通)
windows·macos
爱丽_9 小时前
MyBatis动态SQL完全指南
服务器·sql·mybatis