google guava 重复key的Map范例使用

来源:互联网 发布:淘宝店铺悬浮导航制作 编辑:程序博客网 时间:2024/04/30 06:16

博客应该是高质量的,我这么想。

   博主最近做项目时,遇到了及其复杂的集合,对象转换工作,大量用到了Map,List等,尤其是Map,类似会出现Map<Map<String,String>,Map<String,String>>这样的情况出现。而我毫无办法。因为往往是两个主键对应了一个信息组,不知道大家有没有遇到过,举个例子:一对夫妻生了很多孩子,那我要把这个数据表达出来,就出现了上面的情况。他们的孩子有多个,应该是一个List。我会这样表达,Map<Map<妻子ID,丈夫ID>,List<孩子ID>>。如果你得到了一组信息,丈夫,妻子,孩子。于是乎你把他们放到了上面的数据结构中。不错。但是!如果你又得到了一组信息。丈夫,妻子,孩子。尴尬的时候出现了。丈夫和妻子是key。Map中不可重复,直接put会覆盖之前的孩子信息。

   写代码的时候,如果碰到这种情况,不是什么大不了的事,你总能通过一定的编码手段来组装进数据结构中。不过编码肯定复杂些,能不能简单点呢?这时候,我发现了guava中的MutiMap,发现非常好用。你不再需要考虑,直接put,不用考虑Map key不可重复,value会被替换这个蛋疼的问题。


例如:


          Multimap<Map<String,String>> map = Maps.newHashMap();

          Map<String,String> keyMap  = Maps.newHashMap();

         keyMap.put("woman","man")

         map.put(keyMap,"child1");

         map.put(keyMap,"child2");


正如你看到的,直接put就好,key会允许重复。如果要得到夫妇的孩子们,只需要     map.get(Map<String,String> keyMap).返回的是一个Collection<String> 集合,List,Set等继承了Collection 接口,你可以直接转换。

0 0
原创粉丝点击