Guava HashMultiMap(MultiMap)反转映射

(一)MultiMap 多重map,一个key可以对应多个值(多个值放在一个list中),可用于分组

举例:

 Multimap<String, Integer> map = HashMultimap.create(); //Multimap是把键映射到任意多个值的一般方式
        map.put("hello", 1); //key相同时不会覆盖原value
        map.put("hello", 2);
        map.put("hello", 3);
        map.put("world", 4);
        map.put("world", 5);
        map.put("java", 7);
        map.put("java", 8);
        System.out.println(map); //{world=[4, 5], java=[8, 7], hello=[1, 2, 3]}
        System.out.println(map.get("hello")); //返回的是集合  // [1, 2, 3]
        System.out.println(map.get("jre")); //返回的是集合  // []
        System.out.println(map.asMap().get("jre")); //返回  null
        System.out.println(map.size()); //返回所有”键-单个值映射”的个数,而非不同键的个数 // 7
        System.out.println(map.keySet().size()); //返回不同key的个数 // 3

        Map<String, Collection<Integer>> mapView = map.asMap();
        System.out.println(mapView);// {world=[4, 5], java=[8, 7], hello=[1, 2, 3]}

(二)还可以用于反转映射

ArrayListMultimap<String, Integer> multimap = ArrayListMultimap.create();
multimap.putAll("b", Ints.asList(2, 4, 6));
multimap.putAll("a", Ints.asList(4, 2, 1));
multimap.putAll("c", Ints.asList(2, 5, 3));
 
TreeMultimap<Integer, String> inverse = Multimaps.invertFrom(multimap, TreeMultimap<String, Integer>.create());
//注意我们选择的实现,因为选了TreeMultimap,得到的反转结果是有序的
结果:
/*
* inverse maps:
*  1 => {"a"}
*  2 => {"a", "b", "c"}
*  3 => {"c"}
*  4 => {"a", "b"}
*  5 => {"c"}
*  6 => {"b"}

posted on 2018-07-18 10:19  天生一对  阅读(768)  评论(0编辑  收藏  举报

导航