📅  最后修改于: 2023-12-03 15:01:05.322000             🧑  作者: Mango
Guava是Google开源的一组Java第三方库, 提供了很多数据处理、缓存、字符串处理等实用的工具类。本教程将介绍Guava的主要功能和使用方法。
Guava包含了很多实用的工具类,主要包括以下几个方面:
Joiner、CharMatcher、Preconditions等。
ImmutableList、Sets、Multimap等。
CacheBuilder、LoadingCache等。
EventBus等。
Splitter、CaseFormat等。
ByteStreams、Files、Charsets、Resources等。
在pom.xml文件中添加以下依赖:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>29.0-jre</version>
</dependency>
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用于对字符进行过滤和替换等操作。
String str = "hello123";
String newStr = CharMatcher.digit().replaceFrom(str, "|");
System.out.println(newStr); //输出 "hello|"
Preconditions用于进行断言检查,在代码中可以加入针对参数的检查等。
public void foo(String str, int n) {
Preconditions.checkNotNull(str, "str不能为空");
Preconditions.checkArgument(n > 0, "n必须大于0");
//do something
}
ImmutableList是一个不可变的集合类,创建后不能进行修改。
List<String> list = ImmutableList.of("a", "b", "c");
System.out.println(list); //输出 "[a, b, c]"
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是一个可以保存一个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用于创建缓存,可以指定缓存大小、过期时间等。
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<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用于构建事件驱动系统,可以方便地进行事件监听和触发。
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用于切割字符串,可以指定分隔符、忽略空格等。
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用于格式化字符串的大小写和命名方式等。
String str = "hello_world";
String newStr = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, str);
System.out.println(newStr); //输出 "helloWorld"
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提供了一些常用的文件处理方法。
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提供了一些常用字符编码的常量。
byte[] data = "你好,Guava!".getBytes(Charsets.UTF_8);
System.out.println(new String(data, Charsets.UTF_8)); //输出 "你好,Guava!"
Resources提供了访问classPath中资源文件的方法。
String content = Resources.toString(Resources.getResource("test.txt"), Charsets.UTF_8);
System.out.println(content); //输出 "Hello, Guava!"
以上就是Guava的主要功能和使用方法,希望对大家有所帮助。Guava提供了很多实用的工具类,可以节省很多开发时间和提高开发效率,强烈建议大家在实际项目中使用。