Guava中的Joiner和Splitter

Naylor發表於2024-10-10

目錄
  • Guava 介紹
  • Joiner
    • list轉string
    • map轉string
    • 處理巢狀集合
    • 處理null值
  • Splitter
    • string轉list
    • string轉map
    • 多個拆分符
  • 輸出
  • 程式碼

Guava 介紹

Guava 是 Google 開發的一個開源 Java 庫,提供一系列核心功能增強 Java 的標準庫。

它包含許多有用的工具和集合類,使 Java 開發更加高效,程式碼更加簡潔、易於維護。

  • 1. 集合工具, Immutable Collections: Guava 提供了不可變集合(如 ImmutableList, ImmutableSet, ImmutableMap),可以防止集合的意外修改。Multiset, Multimap, BiMap: 這些集合型別支援更復雜的場景,例如允許重複的元素(Multiset)、一個鍵對映到多個值(Multimap)和雙向對映(BiMap)。

  • 2. 快取, Guava 提供了簡單的快取實現,允許開發者在記憶體中快取資料,以提高應用程式效能。使用 CacheBuilder 可以輕鬆建立快取,並支援過期策略和最大容量設定。、

  • 3. 併發工具,Guava 包含了用於併發程式設計的工具,例如 ListenableFuture,它是對 Java Future 的擴充套件,允許註冊回撥以處理非同步結果。

  • 4. 字串處理,提供了 Strings 工具類,用於字串的操作和處理,例如空值檢查、連線字串等。

  • 5. IO 工具,Guava 包含了對輸入輸出的支援,提供了 Files 和 ByteStreams 類,簡化檔案讀寫和位元組流操作。

  • 6. 雜湊與編碼,Guava 提供了強大的雜湊函式和編碼工具,支援生成 MD5、SHA-1 等雜湊值,並提供 Base64 編碼和解碼。

  • 7. 範圍,Range 類允許定義一組連續的值,這對於處理數值範圍或時間範圍非常有用。

  • 8. 圖形資料結構,Guava 還支援圖形資料結構(Graph),方便表示節點和邊的關係,適合進行網路和路徑分析等應用。

  • 9. Preconditions,提供了 Preconditions 類,用於簡化引數驗證和檢查,幫助開發者在方法開頭快速檢查輸入條件。

  • 10. 擴充套件 Java API,Guava 還擴充套件了 Java 標準庫的一些 API,如 Optional 類,用於處理可能為空的值,從而避免 NullPointerException。

Joiner

使用 Joiner 將集合轉換為 String

list轉string


/**
 * 使用 joiner 將 list 轉換為字串
 */
private static void joinerTest1() {
    List<String> names = Lists.newArrayList("r", "a", "m", "b", "l", "e");
    String result = Joiner.on(",").join(names);
    System.out.println(result);
}


  • on :用於指定字串分隔符

map轉string


/**
 * 使用 joiner 將 map 轉換為字串
 */
private static void joinerTest2() {
    Map<String, String> map = Maps.newHashMap();
    map.put("name", "ramble");
    map.put("tag", "technology");
    String result = Joiner.on(" , ").withKeyValueSeparator(" = ")
            .join(map);
    System.out.println(result);
}


  • withKeyValueSeparator:用於指定 key ,value 分隔符

處理巢狀集合


/**
 * 使用 joiner 將巢狀的 list 轉換為字串
 */
private static void joinerTest3() {
    List<ArrayList<String>> nested = Lists.newArrayList(
            Lists.newArrayList("spring", "banana", "orange"),
            Lists.newArrayList("cat", "dog", "bird"),
            Lists.newArrayList("John", "Jane", "Adam"));
    System.out.println("巢狀的集合=" + JSON.toJSONString(nested));
    String result = Joiner.on(";").join(Iterables.transform(nested,
            new Function<List<String>, String>() {
                @Override
                public String apply(List<String> input) {
                    return Joiner.on("-").join(input);
                }
            }));
    System.out.println(result);
}


處理null值


/**
 * 使用 joiner 時候對於 null 值的處理。
 * 使用 skipNulls() 忽略 null 值
 * 使用 useForNull() 將null值替換為指定的字串
 * 注意: skipNulls() 和 useForNull() 不能同時使用
 */
private static void joinerTest4() {
    List<String> names = Lists.newArrayList("John", null, "Jane", "Adam", "Tom");
    String result = Joiner.on(",")
            // 忽略空值
            // .skipNulls()
            // 使用指定字串替換空值
            .useForNull("我是null值")
            .join(names);
    System.out.println(result);
}


  • 使用 skipNulls() 忽略 null 值
  • 使用 useForNull() 將null值替換為指定的字串
  • 注意: skipNulls() 和 useForNull() 不能同時使用

Splitter

使用 Splitter 將 String 拆分為一個集合

string轉list


/**
 * 使用 splitter 將字串轉換為 list
 */
private static void splitterTest1() {
    String input = "apple - banana - orange";
    List<String> result = Splitter.on("-")
            // 用來刪除前後空格
            .trimResults()
            .splitToList(input);
    System.out.println(JSON.toJSONString(result));
}


  • trimResults:用來刪除元素前後空格

string轉map


/**
 * 使用 splitter 將字串轉換為 map
 */
private static void splitterTest2() {
    String input = "John=first,Adam=second";
    Map<String, String> result = Splitter.on(",")
            .withKeyValueSeparator("=")
            .split(input);
    System.out.println(JSON.toJSONString(result));
}


多個拆分符


/**
 * 使用 splitter 將字串轉換為 list,使用多個分隔符
 */
private static void splitterTest3() {
    String input = "apple.banana,,orange,,.cml-";
    List<String> result = Splitter.onPattern("[.,-]")
            // 忽略空字串
            .omitEmptyStrings()
            .splitToList(input);
    System.out.println(JSON.toJSONString(result));
}


  • omitEmptyStrings:用來忽略空字串

輸出

上述示例程式碼輸出結果:


r,a,m,b,l,e
name = ramble , tag = technology
巢狀的集合=[["spring","banana","orange"],["cat","dog","bird"],["John","Jane","Adam"]]
spring-banana-orange;cat-dog-bird;John-Jane-Adam
John,我是null值,Jane,Adam,Tom
["apple","banana","orange"]
{"John":"first","Adam":"second"}
["apple","banana","orange","cml"]

程式碼

https://gitee.com/naylor_personal/ramble-spring-boot/tree/master/guava

相關文章