Guava Google 核心 Java 類庫使用總結

jar 包依賴

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>28.0-jre</version>
</dependency>

 

Joiner && Splitter

public class AnswerApp {
	// 定義連接器, 可支持正則表達式
    public static final Joiner JOINER = Joiner.on(",").useForNull("default");
    public static final Joiner.MapJoiner MAP_JOINER = Joiner.on(",").withKeyValueSeparator("@");

    // 定義分割器, 可支持正則表達式
    // trimResults: 去掉元素中的空格   omitEmptyStrings: 忽略空字符  limit: 限制分割的個數
    public static final Splitter SPLIT = Splitter.on(",").trimResults().omitEmptyStrings().limit(10);
    // 定義固定長度分割器
    public static final Splitter FIXLENGTH_SPLIT = Splitter.fixedLength(5);
    public static final Splitter.MapSplitter MAP_SPLIT = Splitter.on(",").withKeyValueSeparator("@");
    // 注意這裏的固定長度5代表 key@value 的長度爲 5
    public static final Splitter.MapSplitter FIXLENGTH_MAP_SPLIT = Splitter.fixedLength(5).withKeyValueSeparator("@");

    public static void main(String[] args) {
        List<String> list = Lists.newArrayList("answer", "", "AnswerAIL", null);
        System.out.println(JOINER.join(list));
        System.out.println();

        Map<String, String> map = ImmutableMap.of("name", "AnswerAIL", "email", "[email protected]");
        System.out.println(MAP_JOINER.join(map));
        System.out.println();

        for (String str: SPLIT.split(" answer, ,,AnswerAIL ,code")) {
            System.out.print(str + ">");
        }
        System.out.println("\n");

        for (String str: FIXLENGTH_SPLIT.split("aaaaabbbbbccccc")) {
            System.out.print(str + ">");
        }
        System.out.println("\n");

        Map<String, String> params = MAP_SPLIT.split("name@AnswerAIL,address@pt");
        System.out.println(params);
        System.out.println();

        System.out.println(FIXLENGTH_MAP_SPLIT.split("aa@a1bb@b2"));
    }

}

程序運行結果

answer,,AnswerAIL,default

name@AnswerAIL,email@answer_ljm@163.com

answer>AnswerAIL>code>

aaaaa>bbbbb>ccccc>

{name=AnswerAIL, address=pt}

{aa=a1, bb=b2}

 

Ints

public class AnswerApp {
    public static void main(String[] args) {
        // 快速轉集合
        List<Integer> nums = Ints.asList(1, 2, 3, 4, 5);
        System.out.println(nums.size());		// 5
        System.out.println();

        // 集合轉數組
        int[] array = Ints.toArray(nums);

        // 數組合並
        int[] concat = Ints.concat(array, new int[]{3, 4, 5});
        System.out.println(concat.length);		// 8
        System.out.println();

        // 數組中是否包含某元素
        System.out.println(Ints.contains(concat, 3));	// true
        System.out.println();

        // 數組元素最大值/最小值
        System.out.println(Ints.max(new int[]{1, 5, 3}));	// 5
        System.out.println(Ints.min(new int[]{1, 5, 3}));	// 1
        System.out.println();

        // 元素 3 在集合中出現的下標索引
        System.out.println(Ints.indexOf(concat, 3));		// 2
        // 元素 3 在集合中最後出現的下標索引
        System.out.println(Ints.lastIndexOf(concat, 3));	// 5
    }
}

 

Multiset 無序可重複的集合

public static void main(String[] args) {
    Multiset multiset = HashMultiset.create();
    multiset.add("a");
    multiset.add("a");
    multiset.add("b");
    // 往集合中新增 n 個 元素
    multiset.add("c", 5);

    // 查看集合的大小
    System.out.println(multiset.size());				// 8
    // 查看集合內不同元素的個數(會對元素進行去重)
    System.out.println(multiset.elementSet().size());	// 3
    // 查看集合內某個元素的個數
    System.out.println(multiset.count("c"));			// 5
}

 

Multimap 實現 key-value 一對多

public static void main(String[] args) {
    // Multimap 的實現類有: ArrayListMultimap/HashMultimap/LinkedHashMultimap/TreeMultimap/ImmutableMultimap/...
    // Multimap 實現 key-value 一對多的情況
    ArrayListMultimap<String, String> arrayListMultimap = ArrayListMultimap.create();
    arrayListMultimap.put("name", "answer");
    arrayListMultimap.put("name", "AnswerAIL");
    arrayListMultimap.put("address", "pt");
    
    // 2
    System.out.println(arrayListMultimap.get("name").size());
    // {address=[pt], name=[answer, AnswerAIL]}
    System.out.println(arrayListMultimap.asMap());
}

 

BiMap

  • find key by value: biMap.get()
  • find value by key: biMap.inverse().get()
public static void main(String[] args) {
    BiMap<String, String> biMap = HashBiMap.create();
    biMap.put("userName", "Answer");
    biMap.put("userName", "AnswerAIL");
    // 會拋異常, 不允許 value 重複
    //        biMap.put("loginName", "AnswerAIL");
    // 強制覆蓋
    biMap.forcePut("loginName", "AnswerAIL");

    // 由於 value=AnswerAIL 被強制 loginName 覆蓋, 所以 userName 對應的 value=null
    System.out.println(biMap.get("userName"));				// null
    // 如果 key 不存在, 則使用默認 value
    System.out.println(biMap.getOrDefault("email", "[email protected]"));
    // 根據 value 查找 key
    System.out.println(biMap.inverse().get("AnswerAIL"));	// loginName
}

 

Table<Row, Column, Value>

public static void main(String[] args) {
    Table<String, String, Integer> table = HashBasedTable.create();
    table.put("iris", "語文", 88);
    table.put("steven", "語文", 90);
    table.put("james", "語文", 85);
    table.put("iris", "數學", 98);
    table.put("steven", "數學", 93);
    table.put("james", "數學", 95);
    table.put("iris", "英語", 90);
    table.put("steven", "英語", 87);
    table.put("james", "英語", 86);

    System.out.println(table.row("iris"));
    System.out.println(table.column("數學"));
    System.out.println(table.get("iris", "數學"));
    System.out.println();

    System.out.println(table.containsRow("iris"));
    System.out.println(table.containsColumn("數學"));
    System.out.println(table.containsValue(100));
    System.out.println();

    System.out.println(table.rowKeySet());
    System.out.println(table.rowMap());
    System.out.println(table.columnKeySet());
    System.out.println(table.columnMap());
}

程序運行時輸出

{語文=88, 數學=98, 英語=90}
{iris=98, steven=93, james=95}
98

true
true
false

[iris, steven, james]
{iris={語文=88, 數學=98, 英語=90}, steven={語文=90, 數學=93, 英語=87}, james={語文=85, 數學=95, 英語=86}}
[語文, 數學, 英語]
{語文={iris=88, steven=90, james=85}, 數學={iris=98, steven=93, james=95}, 英語={iris=90, steven=87, james=86}}

 

本地緩存的實現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章