📜  Guava教程(1)

📅  最后修改于: 2023-12-03 15:01:05.322000             🧑  作者: Mango

Guava教程

Guava是Google开源的一组Java第三方库, 提供了很多数据处理、缓存、字符串处理等实用的工具类。本教程将介绍Guava的主要功能和使用方法。

Guava的主要功能

Guava包含了很多实用的工具类,主要包括以下几个方面:

  • 基本工具类:比如
    Joiner、CharMatcher、Preconditions
    等。
  • 集合类:比如
    ImmutableList、Sets、Multimap
    等。
  • 缓存类:比如
    CacheBuilder、LoadingCache
    等。
  • 事件总线类:比如
    EventBus
    等。
  • 字符串处理类:比如
    Splitter、CaseFormat
    等。
  • IO类:比如
    ByteStreams、Files、Charsets、Resources
    等。
使用方法
Maven依赖

在pom.xml文件中添加以下依赖:

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>29.0-jre</version>
</dependency>
基本工具类

Joiner

Joiner用于连接多个字符串,可以指定连接符和忽略null值等。

List<String> list = Arrays.asList("a", "b", null, "c");
String joinStr = Joiner.on(",").skipNulls().join(list);
System.out.println(joinStr); //输出 "a,b,c"

CharMatcher

CharMatcher用于对字符进行过滤和替换等操作。

String str = "hello123";
String newStr = CharMatcher.digit().replaceFrom(str, "|");
System.out.println(newStr); //输出 "hello|"

Preconditions

Preconditions用于进行断言检查,在代码中可以加入针对参数的检查等。

public void foo(String str, int n) {
    Preconditions.checkNotNull(str, "str不能为空");
    Preconditions.checkArgument(n > 0, "n必须大于0");

    //do something
}
集合类

ImmutableList

ImmutableList是一个不可变的集合类,创建后不能进行修改。

List<String> list = ImmutableList.of("a", "b", "c");
System.out.println(list); //输出 "[a, b, c]"

Sets

Sets提供了一些集合操作的实用工具类。

Set<String> set1 = ImmutableSet.of("a", "b", "c");
Set<String> set2 = ImmutableSet.of("c", "d", "e");

Set<String> intersection = Sets.intersection(set1, set2); //求交集
Set<String> union = Sets.union(set1, set2); //求并集
Set<String> difference = Sets.difference(set1, set2); //求差集

System.out.println(intersection); //输出 "[c]"
System.out.println(union); //输出 "[a, b, c, d, e]"
System.out.println(difference); //输出 "[a, b]"

Multimap

Multimap是一个可以保存一个key对应多个value的集合类。

ListMultimap<String, String> multimap = ArrayListMultimap.create();
multimap.put("fruit", "apple");
multimap.put("fruit", "banana");
multimap.put("vegetable", "carrot");
multimap.put("vegetable", "cucumber");

System.out.println(multimap.get("fruit")); //输出 "[apple, banana]"
System.out.println(multimap.get("vegetable")); //输出 "[carrot, cucumber]"
缓存类

CacheBuilder

CacheBuilder用于创建缓存,可以指定缓存大小、过期时间等。

LoadingCache<String, String> cache = CacheBuilder.newBuilder()
        .maximumSize(100)
        .expireAfterWrite(10, TimeUnit.MINUTES)
        .build(new CacheLoader<String, String>() {
            @Override
            public String load(String key) throws Exception {
                return "value-" + key;
            }
        });

LoadingCache

LoadingCache是一个带有自动加载功能的缓存类。

LoadingCache<String, String> cache = CacheBuilder.newBuilder()
        .maximumSize(100)
        .expireAfterWrite(10, TimeUnit.MINUTES)
        .build(new CacheLoader<String, String>() {
            @Override
            public String load(String key) throws Exception {
                return "value-" + key;
            }
        });

String value = cache.get("key");
System.out.println(value); //输出 "value-key"
事件总线类

EventBus

EventBus用于构建事件驱动系统,可以方便地进行事件监听和触发。

class TestEvent {
    private String message;

    public TestEvent(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }
}

class TestListener {
    @Subscribe
    public void handle(TestEvent event) {
        String message = event.getMessage();
        System.out.println(message);
    }
}

EventBus eventBus = new EventBus();
TestListener listener = new TestListener();
eventBus.register(listener);
eventBus.post(new TestEvent("Hello, Guava!"));
字符串处理类

Splitter

Splitter用于切割字符串,可以指定分隔符、忽略空格等。

String str = "a,b, c,d,e";
List<String> list = Splitter.on(",")
        .trimResults()
        .omitEmptyStrings()
        .splitToList(str);
System.out.println(list); //输出 "[a, b, c, d, e]"

CaseFormat

CaseFormat用于格式化字符串的大小写和命名方式等。

String str = "hello_world";
String newStr = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, str);
System.out.println(newStr); //输出 "helloWorld"
IO类

ByteStreams

ByteStreams提供了处理byte数组的实用工具类。

byte[] data = {1, 2, 3, 4, 5};
ByteArrayInputStream bais = new ByteArrayInputStream(data);
ByteArrayOutputStream baos = new ByteArrayOutputStream();

ByteStreams.copy(bais, baos);
byte[] newData = baos.toByteArray();

System.out.println(Arrays.toString(newData)); //输出 "[1, 2, 3, 4, 5]"

Files

Files提供了一些常用的文件处理方法。

File file = new File("test.txt");
String content = "Hello, Guava!";
Files.write(content.getBytes(Charsets.UTF_8), file); //写入文件

byte[] data = Files.toByteArray(file); //读取文件
System.out.println(new String(data)); //输出 "Hello, Guava!"

Charsets

Charsets提供了一些常用字符编码的常量。

byte[] data = "你好,Guava!".getBytes(Charsets.UTF_8);
System.out.println(new String(data, Charsets.UTF_8)); //输出 "你好,Guava!"

Resources

Resources提供了访问classPath中资源文件的方法。

String content = Resources.toString(Resources.getResource("test.txt"), Charsets.UTF_8);
System.out.println(content); //输出 "Hello, Guava!"
结束语

以上就是Guava的主要功能和使用方法,希望对大家有所帮助。Guava提供了很多实用的工具类,可以节省很多开发时间和提高开发效率,强烈建议大家在实际项目中使用。