Guava

guava实用功能之Multiset,Multimap与Bima

2016-11-05  本文已影响158人  VikingOldYoung

Multiset

无序+可重复
利用Multiset重新解决之前的字符串出现次数的问题,可以很容易解决。
利用这个功能可以完成很多有用的功能,如可以用来统计网站会员访问的次数。
element();返回元素的容器
count();返回重复的次数

public static void main(String[] args) {
        String str = "this a cat and that is a mice where is the food";
        //分割字符串
        String[] strs = str.split(" ");
        //把字符串放进Multiset里面
        Multiset<String> set=HashMultiset.create();
        for(String temp:strs){
            set.add(temp);
        }
        //获取Multiset里的元素
        Set<String> eset=set.elementSet();
        for(String temp:eset){
            System.out.println(temp+"---------->"+set.count(temp));//count记录出现的次数
        }
    }

Multimap

Multimap是键可以重复的map
这里的意思,内部实现就是当键重复时,他的值不会覆盖,而是存到对应于键的一个容器里。这样子我们可以用他来统计重复的具体内容。
以下使用Multimap统计老师教授的课程

public static void main(String[] args) {
        //统计每个老师教的课程
        Map<String, String> map=new HashMap<>();
        map.put("电力电子技术","王伟");
        map.put("单片机","王伟");
        map.put("微机", "刘一帆");
        map.put("局域网", "刘一帆");
        map.put("高数", "李小伟");
        map.put("现控", "沈浩");
        
        Multimap<String, String> teachers=ArrayListMultimap.create();
        //迭代之前的map,吧元素存进新的Multimap,但是用老师来当做键,这样子每个老师的课程就存在一起了
        Iterator<Map.Entry<String, String>> it=map.entrySet().iterator();
        while(it.hasNext()){
            Entry<String, String> entry=it.next();
            String key=entry.getKey();
            String value=entry.getValue();
            
            teachers.put(value,key);
        }
        //获的键
        Set<String> keys=teachers.keySet();
        for(String key:keys){
            Collection<String> col=teachers.get(key);
            System.out.println(key+"---->"+col);
        }
    }

BiMap

键跟值都不能重复的map
因为键-值都不能重复,所以可以反转inverse();此时键值对调,就可以通过值来找键了

public static void main(String[] args) {
        BiMap<String, String> map=HashBiMap.create();
        map.put("Viking", "viking@qq.com");
        map.put("good", "good@qq.com");
        //因为键-值都不能重复,所以可以反转inverse();反转,此时键值对调,就可以通过值来找键了
        String usr=map.inverse().get("viking@qq.com");
        System.out.println(usr);
    }
上一篇下一篇

猜你喜欢

热点阅读