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


    }

  

原文地址:https://www.cnblogs.com/bao-bei/p/14428638.html