guava之multimap
一、概述
1、基本介绍和案例说明
multimap和MultiSet的继承结果很相似,只不过在上层的接口是Multimap不是Multiset。
Multimap的特点其实就是可以包含有几个重复Key的value,你可以put进入多个不同value但是相同的key,但是又不是让后面覆盖前面的内容。
它的业务场景:当你需要构造像Map<K, List<V>>或者Map<K, Set<V>>这样比较复杂的集合类型的数据结构,来做相应的业务逻辑处理。那Multimap在合适不过。
举例
Multimap<Integer, Integer> map = HashMultimap.create();
map.put(1, 2);
map.put(1, 3);
map.put(1, 2);
map.put(2, 3);
map.put(4, 2);
map.put(4, 3);
map.put(4, 2);
map.put(4, 3);
Collection<Integer> integers = map.get(1);
System.out.println(map.toString());
2、实际开发场景及常用方法
(1)根据业务需要对下面的list数据根据name字段来进行分组:
public static void application_1(){
List<Item> list = new ArrayList<>();
Item item = new Item("2018-01-31","wuzhong",0.8);
list.add(item);
item = new Item("2018-01-30","wuzhong",0.9);
list.add(item);
item = new Item("2018-01-31","wuzhong2",0.8);
list.add(item);
//传统做法
Map<String,List<Item>> map = new HashMap<>();
for (Item item1 : list) {
List<Item> tmp = map.get(item1.getName());
if(null == tmp){
tmp = new ArrayList<>();
map.put(item1.getName(),tmp);
}
tmp.add(item1);
}
//使用multiMap
Multimap<String,Item> multimap = ArrayListMultimap.create();
for (Item item2 : list) {
multimap.put(item2.getName(),item2);
}
}
(2)解常用方法:
public static void application_2(){
Multimap<String,String> multimap = ArrayListMultimap.create();
multimap.put("lower","a");
multimap.put("lower","b");
multimap.put("lower","c");
multimap.put("upper","A");
multimap.put("upper","B");
List<String> lowerList = (List<String>) multimap.get("lower");
System.out.println("输出key为lower的list集合=========");
System.out.println(lowerList.toString());
lowerList.add("f");
System.out.println(lowerList.toString());
Map<String,Collection<String>> map = multimap.asMap();
System.out.println("把Multimap转为一个map============");
for (Map.Entry<String, Collection<String>> entry : map.entrySet()) {
String key = entry.getKey();
Collection<String> value = multimap.get(key);
System.out.println(key + ":" + value);
}
System.out.println("获得所有Multimap的key值==========");
Set<String> keys = multimap.keySet();
for (String key : keys) {
System.out.println(key);
}
System.out.println("输出Multimap所有的value值========");
Collection<String> values = multimap.values();
System.out.println(values);
}
浙公网安备 33010602011771号