首頁  >  文章  >  Java  >  Java Guava的使用技巧有哪些

Java Guava的使用技巧有哪些

WBOY
WBOY轉載
2023-04-14 22:37:041461瀏覽

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);

// 获取第一个元素,如果集合为空返回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)

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, Callabled1336e9e686742fb22c1860557381905 valueLoader):取得指定key的快取值,如果快取中沒有,則呼叫valueLoader載入數據並存入快取。

  • getIfPresent(Object key):取得指定key的快取值,如果快取中沒有,則傳回null。

  • getAllPresent(Iterable6b3d0130bba23ae47fe2b8e8cddf0195 keys):取得指定keys的快取值,如果快取中沒有,則傳回null。

  • put(K key, V 值):將指定key的快取值存入快取。

  • putAll(Map90753ef5ffbd6c8060b28e347ac11071 m):將指定Map的快取值存入快取。

  • invalidate(Object key):將指定key的快取值從快取中刪除。

  • invalidateAll(Iterable6b3d0130bba23ae47fe2b8e8cddf0195 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的使用技巧有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除