Multimap概念:
Multimap的特点其实就是可以包含有几个重复key的value值,你可以put进多个不同的value,但是key相同,但是又不是让后面的覆盖前面的内容.
业务场景:当你需要构造像Map<K,List<V>> 或者Map(K,Set<V>)这样比较复杂的集合类型的数据结构,来做相应的业务逻辑处理,那Multimap在合适不过
Mulitmap使用
2.1 首先引入jar包
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.0-jre</version>
</dependency>
2.2 例子
执行结果:
实它会把相同的key和value的值会覆盖起来,但是相同的key又可以保留不同的value,因为它的entry的实现是一个Set,Set会对相同的Entry<K,V>进行曲重,所以会有这种情况
List<Map<String, String>> mapList = new ArrayList<>();
Map<String, String> map1 = new HashMap<>();
map1.put("date", "2018-01-31");
map1.put("name", "wuzhong");
map1.put("socre", "0.8");
Map<String, String> map2 = new HashMap<>();
map2.put("date", "2018-01-30");
map2.put("name", "wuzhong");
map2.put("socre", "0.9");
Map<String, String> map3 = new HashMap<>();
map3.put("date", "2018-01-31");
map3.put("name", "wuzhong2");
map3.put("socre", "0.8");
mapList.add(map1);
mapList.add(map2);
mapList.add(map3);
//1.传统做法:名字=key,List为Value
Map<String, List<Map<String, String>>> mapLists = new HashMap<>();
for (Map<String, String> mapVo : mapList) {
String name = mapVo.get("name");
List<Map<String, String>> temp = mapLists.get(name);
if (null == temp) {
temp = new ArrayList<>();
mapLists.put(name, temp);
}
//名字已经存在,map值加List
temp.add(mapVo);
}
//逻辑:如果key不存在,加入key,然后再赋值;如果key存在,直接赋值
System.out.println(mapLists.toString());
//用MultiMap做法
ArrayListMultimap<String, Map<String,String>> multiMap = ArrayListMultimap.create();
for (Map<String,String> stringMap :mapList) {
multiMap.put(stringMap.get("name"),stringMap);
}
System.out.println(multiMap);
}
}