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); }