1. 程式人生 > >我就吃瓜(Guava): 集合2-> MultiSet,MultiMap,BiMap,Lists

我就吃瓜(Guava): 集合2-> MultiSet,MultiMap,BiMap,Lists

MultiSet : 可以有相同元素的Set

  • MutiSet中對應的元素都有一個count值,也有elementSet()集,來存放去重之後的元素

@Test
    public void test1() {
        Multiset<String> multiset = LinkedHashMultiset.create();
        multiset.add("a");
        multiset.add("a");
        multiset.add("a");
        multiset.add("b");
        multiset.add("c");
        multiset.add("c");
        //6
        System.out.println(multiset.size());
        //3
        System.out.println(multiset.elementSet().size());
        //[a x 3, b, c x 2]
        System.out.println(multiset.toString());
        //設定某個元素的值
        multiset.setCount("d", 4);
        //d:4
        System.out.println("d" + ":" + multiset.count("d"));
    }

MultiMap : 一個key可以對應多個value的Map

@Test
public void test2() {
    Multimap<String, String> multimap = ArrayListMultimap.create();
    multimap.put("a", "ak");
    multimap.put("a", "ad");
    multimap.put("b", "ban");
    //3
    System.out.println(multimap.keys().size());
    //[ban] [ak, ad]
    for (String s : multimap.keySet()) {
        System.out.println(multimap.get(s));
    }
}

BiMap : key和value可以翻轉的map

  • 在使用BiMap時,會要求value的唯一性,如果value重複,則會丟擲異常。

  • inverse()方法會返回一個反轉的BiMap,但是這個反轉的map不是新的map物件,他實現了一種檢視關聯,對於反轉後的map的操作都會影響原來的map。

@Test
public void test3() {
    BiMap<String, String> biMap = HashBiMap.create();
    biMap.put("sina", "@sina.com");
    biMap.put("qq", "@qq.com");
    String user = biMap.inverse().get("@sina.com");
    //sina
    System.out.println(user);
    //true
    System.out.println(biMap.inverse().inverse() == biMap);
    biMap.inverse().put("@wb.com", "wb");
    //@wb.com
    System.out.println(biMap.get("wb"));
}

Lists : 建立List,以及其他

@Test
public void test1(){
    ArrayList<String> strings = Lists.newArrayList();
    //按字元分割,
    ImmutableList<Character> characters = Lists.charactersOf("hello,world");
    for (Character character : characters) {
        strings.add(character.toString());
    }
    //按照長度來進行分割,
    List<List<String>> partition = Lists.partition(strings, 5);
    //[[h, e, l, l, o], [,, w, o, r, l], [d]]
    System.out.println(partition);
}