zoukankan      html  css  js  c++  java
  • 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);
    
    
        }
    

      

  • 相关阅读:
    Hibernate 查询语句
    application 网站计数器
    Hibernate 配置
    常用正则表达式
    字符串的系列操作
    输入内容验证
    大小写字母验证
    验证非零的正整数
    验证数字输入
    Java面向对象之多态
  • 原文地址:https://www.cnblogs.com/bao-bei/p/14428638.html
Copyright © 2011-2022 走看看