guava简介guava是google发布的一个开源库,主要提供了一些在java开发中非常有用的工具类和api,比如字符串处理、集合操作、函数式编程、缓存等等。
字符串(strings)strings是guava提供的一组字符串工具,它提供了许多有用的方法来处理字符串。以下是strings的主要方法:
isnullorempty(string string):判断字符串是否为空或null。
padend(string string, int minlength, char padchar):在字符串末尾填充指定字符,直到字符串达到指定长度。
padstart(string string, int minlength, char padchar):在字符串开头填充指定字符,直到字符串达到指定长度。
repeat(string string, int count):重复指定字符串指定次数。
commonprefix(charsequence a, charsequence b):获取两个字符串的最长公共前缀。
commonsuffix(charsequence a, charsequence b):获取两个字符串的最长公共后缀。
以下是strings的使用示例:
public class stringsdemo { public static void main(string[] args) { // 判断字符串是否为空或null string str1 = null; string str2 = ""; system.out.println(strings.isnullorempty(str1)); system.out.println(strings.isnullorempty(str2)); // 在字符串末尾填充指定字符,直到字符串达到指定长度 string str3 = "abc"; string paddedstr1 = strings.padend(str3, 6, '*'); system.out.println(paddedstr1); // 在字符串开头填充指定字符,直到字符串达到指定长度 string str4 = "abc"; string paddedstr2 = strings.padstart(str4, 6, '*'); system.out.println(paddedstr2); // 重复指定字符串指定次数 string str5 = "abc"; string repeatedstr = strings.repeat(str5, 3); system.out.println(repeatedstr); // 获取两个字符串的最长公共前缀 string str6 = "abcdefg"; string str7 = "abcdxyz"; string commonprefix = strings.commonprefix(str6, str7); system.out.println(commonprefix); // 获取两个字符串的最长公共后缀 string str8 = "abcdefg"; string str9 = "xyzdefg"; string commonsuffix = strings.commonsuffix(str8, str9); system.out.println(commonsuffix);}
集合操作(collections)guava提供了一些非常有用的集合操作api,如下所示:
1.immutablelist
不可变集合是guava的一个重要特性,它可以确保集合不被修改,从而避免并发访问的问题。immutabellist是不可变list的实现,下面是一个示例代码:
list<string> list = lists.newarraylist("a", "b", "c");immutablelist<string> immutablelist = immutablelist.copyof(list);
2.iterables
iterables类提供了一些有用的方法来操作集合,如下所示:
iterable<string> iterable = lists.newarraylist("a", "b", "c");// 判断集合是否为空boolean isempty = iterables.isempty(iterable);// 获取第一个元素,如果集合为空返回nullstring first = iterables.getfirst(iterable, null);// 获取最后一个元素,如果集合为空返回nullstring last = iterables.getlast(iterable, null);// 获取所有符合条件的元素iterable<string> filtered = iterables.filter(iterable, new predicate<string>() { @override public boolean apply(string input) { return input.startswith("a"); }});// 转换集合类型list<string> newlist = lists.newarraylist(iterables.transform(iterable, new function<string, string>() { @override public string apply(string input) { return input + input; }}));
3.multimaps
multimaps提供了一个非常有用的数据结构,它允许一个键对应多个值,下面是一个示例代码:
listmultimap<integer, string> map = arraylistmultimap.create();map.put(1, "a");map.put(1, "b");map.put(2, "c");list<string> values = map.get(1); // 返回[a, b]
4.maps
maps提供了一些有用的方法来操作map,如下所示:
map<integer, string> map = immutablemap.of(1, "a", 2, "b", 3, "c");// 判断map是否为空boolean isempty = maps.isempty(map);// 获取map中的所有键set<integer> keys = map.keyset();// 获取map中的所有值collection<string> values = map.values();// 获取map中的所有键值对set<map.entry<integer, string>> entries = map.entryset();// 根据键获取值,如果不存在则返回nullstring value = maps.getifpresent(map, 1);
条件检查(preconditions)preconditions是guava提供的一组前置条件检查工具,它提供了一些检查参数是否符合预期的方法。以下是preconditions的主要方法:
checkargument(boolean expression, string errormessagetemplate, object... errormessageargs):检查参数是否符合预期,并抛出illegalargumentexception异常,可以包含错误信息模板和占位符。
checknotnull(t reference, string errormessagetemplate, object... errormessageargs):检查参数是否为null,并抛出nullpointerexception异常,可以包含错误信息模板和占位符。
checkstate(boolean expression, string errormessagetemplate, object... errormessageargs):检查对象状态是否符合预期,并抛出illegalstateexception异常,可以包含错误信息模板和占位符。
checkelementindex(int index, int size, string errormessagetemplate, object... errormessageargs):检查下标是否在集合的范围内,并抛出indexoutofboundsexception异常,可以包含错误信息模板和占位符。
checkpositionindex(int index, int size, string errormessagetemplate, object... errormessageargs):检查下标是否在集合的范围内,可以等于集合的大小,并抛出indexoutofboundsexception异常,可以包含错误信息模板和占位符。
checkpositionindexes(int start, int end, int size):检查开始下标和结束下标是否在集合的范围内,并抛出indexoutofboundsexception异常。
以下是preconditions的使用示例:
public class preconditionsdemo { public static void main(string[] args) { // 检查参数是否符合预期,并抛出illegalargumentexception异常,可以包含错误信息模板和占位符 string str1 = "abc"; preconditions.checkargument(str1.length() < 3, "字符串长度必须小于3"); // 检查参数是否为null,并抛出nullpointerexception异常,可以包含错误信息模板和占位符 string str2 = null; preconditions.checknotnull(str2, "字符串不能为空"); // 检查对象状态是否符合预期,并抛出illegalstateexception异常,可以包含错误信息模板和占位符 boolean flag1 = false; preconditions.checkstate(flag1, "状态不正确"); // 检查下标是否在集合的范围内,并抛出indexoutofboundsexception异常,可以包含错误信息模板和占位符 list<integer> list1 = lists.newarraylist(1, 2, 3, 4, 5); preconditions.checkelementindex(6, list1.size(), "下标越界"); // 检查下标是否在集合的范围内,可以等于集合的大小,并抛出indexoutofboundsexception异常,可以包含错误信息模板和占位符 list<integer> list2 = lists.newarraylist(1, 2, 3, 4, 5); preconditions.checkpositionindex(5, list2.size(), "下标越界"); // 检查开始下标和结束下标是否在集合的范围内,并抛出indexoutofboundsexception异常 list<integer> list3 = lists.newarraylist(1, 2, 3, 4, 5); preconditions.checkpositionindexes(2, 6, list3.size()); // 可以在错误信息中使用占位符 int value1 = 101; preconditions.checkargument(value1 <= 100, "值必须小于等于 %s", 100); // 可以使用supplier来避免计算开销 int value2 = 101; preconditions.checkargument(value2 <= 100, () -> "值必须小于等于 " + 100);}
可以设置过期时间的本地缓存(cachebuilder)cache是guava提供的一个缓存工具类,它可以帮助我们在内存中缓存数据,提高程序的性能。以下是cache的主要方法:
get(k key, callable<? extends v> valueloader):获取指定key的缓存值,如果缓存中没有,则调用valueloader加载数据并存入缓存。
getifpresent(object key):获取指定key的缓存值,如果缓存中没有,则返回null。
getallpresent(iterable<?> keys):获取指定keys的缓存值,如果缓存中没有,则返回null。
put(k key, v value):将指定key的缓存值存入缓存。
putall(map<? extends k, ? extends v> m):将指定map的缓存值存入缓存。
invalidate(object key):将指定key的缓存值从缓存中删除。
invalidateall(iterable<?> keys):将指定keys的缓存值从缓存中删除。
invalidateall():将所有缓存值从缓存中删除。
size():获取缓存中缓存值的数量。
asmap():将缓存转换成map。
public class cachedemo { public static void main(string[] args) { cache<string, string> cache = cachebuilder.newbuilder() .maximumsize(100) .expireafterwrite(10, timeunit.minutes) .build(); cache.put("key", "value"); string value = cache.getifpresent("key"); }}
以上就是java guava的使用技巧有哪些的详细内容。