1. 程式人生 > >guava: multiMap<String, String> 與 ListMultiMap

guava: multiMap<String, String> 與 ListMultiMap

nan cti num 方便 spa avr 可重復 guava system

參考鏈接:https://blog.csdn.net/qq_37487520/article/details/78856868

使用場景及示例

//傳統的場景:  Map<String,List<MyClass>> map = new HashMap<String,List<MyClass>>();   

#缺點:向map裏面添加元素不太方便,需要這樣實現

    void putMyObject(String key, Object value) {
        List<Object> myClassList = myClassListMap.get(key);
        if(myClassList == null) {
            myClassList = new ArrayList<object>();
            myClassListMap.put(key,myClassList);
        }
        myClassList.add(value);
    }

    //補充: HashMap的key和value皆可為null,HashTable的key和value皆不可為null. 二者的key皆不可重復,若重復,後添加的會覆蓋之前的.


//上面傳統的場景,可以使用ArrayListMultimap  

Multimap<String, String> multimap = ArrayListMultimap.create();
multimap.put("fruit", "bannana");
multimap.put("fruit", "apple");//key可以重復
multimap.put("fruit", "apple");//value可以重復,不會覆蓋之前的
multimap.put("fruit", "peach");
multimap.put("fish","crucian");//歐洲鯽魚
multimap.put("fish","carp");//鯉魚

System.err.println(multimap.size());//6

Collection<String> fruits = multimap.get("fruit");
System.err.println(fruits);//[bannana, apple, apple, peach]

for (String s : multimap.values()) {
    System.err.print(s + " , ");//bannana , apple , apple , peach , crucian , carp ,
}

multimap.remove("fruit","apple");
System.err.println(fruits);//[bannana, apple, peach]   註意:這裏只remove了一個apple,因此還有一個apple

multimap.removeAll("fruit");
System.err.println(fruits);//[]


#TODO: 如果將multimap 直接返回前端, 返回的數據是 {"empty":false} , 是否可以返回給前端,Lifu不清楚

//get(key) 返回的是collection,如果希望返回的是list,可以選擇ListMultimap來接收create()的返回值

    ListMultimap<String, String> listMultimap = ArrayListMultimap.create();
    listMultimap.put("fruit", "bannana");
    listMultimap.put("fruit", "apple");
    listMultimap.put("fruit", "peach");
    listMultimap.put("fish","crucian");//歐洲鯽魚
    listMultimap.put("fish","carp");//鯉魚

    List<String> fruits = listMultimap.get("fruit");
    System.err.println(fruits);//[bannana, apple, peach]



//對比 HashMultimap

    Multimap<String,String> multimap= HashMultimap.create();
    multimap.put("fruit", "bannana");
    multimap.put("fruit", "apple");
    multimap.put("fruit", "apple");

    System.err.println(multimap.size());//2
    System.err.println(multimap.get("fruit"));//[apple, bannana]     註意: 這裏只有一個apple

guava: multiMap<String, String> 與 ListMultiMap