您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Java Guava的使用技巧有哪些”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Java Guava的使用技巧有哪些”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
Guava是Google發布的一個開源庫,主要提供了一些在Java開發中非常有用的工具類和API,比如字符串處理、集合操作、函數式編程、緩存等等。
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); }
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); // 獲取第一個元素,如果集合為空返回null String first = Iterables.getFirst(iterable, null); // 獲取最后一個元素,如果集合為空返回null String 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(); // 根據鍵獲取值,如果不存在則返回null String value = Maps.getIfPresent(map, 1);
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); }
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的使用技巧有哪些”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。