Guava - Map


創建Map

通常在創建map時使用new HashMap<>();的方法,guava提供了一個簡潔的方法

Maps.newHashMap();

List轉換Map

        List<Solution> list= new ArrayList<>();
        //普通寫法
        Map<Integer,Solution> map= Maps.newHashMap();
        for(Solution a:list){
            map.put(a.id,a);
        }

        //Maps.uniqueIndex(list, function);
        //guava的寫法,注意: 此時list中的元素的屬性不能有重復的,如果有的話會報錯
        Map<Integer,Solution> map2 =Maps.uniqueIndex(list, new Function<Solution, Integer>() {
            @Override
            public Integer apply(Solution solution) {
                return solution.id;
            }
        });

一個key對應多個value的Multimap

在編寫代碼的過程中經常會用到

        Map<Integer,List<String>> maps= new HashMap<>();
        if(maps.get(1)==null){
            List<String> list= new ArrayList<>();
            list.add("1");
            maps.put(1,list);
        }else{
            maps.get(1).add("I");
        }

Guava的寫法

//        ArrayListMultimap<Object, Object> objectObjectArrayListMultimap = ArrayListMultimap.create();
        HashMultimap<Integer, String> objectObjectHashMultimap = HashMultimap.create();
        //只需要put即可,不用判斷是否為null情況
        objectObjectHashMultimap.put(1,"1");
        objectObjectHashMultimap.put(1,"2");
        objectObjectHashMultimap.put(1,"3");
        System.out.println(objectObjectHashMultimap.get(1));

ArrayListMultimap 返回的是一個List,HashMultimap返回的是一個Set

Multimap的實現

Implementation Keys 的行為類似 Values的行為類似
ArrayListMultimap HashMap ArrayList
HashMultimap HashMap HashSet
LinkedListMultiap LinkedHashMap LinkedList
LinkedHashMultimap LinkedHashMap LinkedHashSet
TreeMultimap TreeMap TreeSet
ImmutableListMultimap ImmutableMap ImmutableList
ImmutableSetMultimap ImmutableMap ImmutableSet

通過key找value 也可通過value找key的Map-BiMap

BiMap也可以反向把值映射到鍵,只要確保值唯一。

        BiMap<String,Integer> biMap= HashBiMap.create();
        biMap.put("I",1);
        biMap.put("V",5);
        biMap.put("X",10);
        biMap.put("L",50);
        biMap.put("C",100);
        biMap.put("D",500);
        biMap.put("M",1000);
        /*HashBiMap.create(new HashMap<String,Integer>(){{
            put("I",1);
            put("V",5);
            put("X",10);
            put("L",50);
            put("C",100);
            put("D",500);
            put("M",1000);
        }});*/
        BiMap<Integer, String> inverse = biMap.inverse();//翻轉
        System.out.println(inverse);//{1=I, 5=V, 10=X, 50=L, 100=C, 500=D, 1000=M}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM