zoukankan      html  css  js  c++  java
  • guava: multiMap<String, String> 与 ListMultiMap

    参考链接:https://blog.csdn.net/qq_37487520/article/details/78856868

    使用场景及示例

    //传统的场景:  Map<String,List<MyClass>> map = new HashMap<String,List<MyClass>>();   
    
    #缺点:向map里面添加元素不太方便,需要这样实现
    
        void putMyObject(String key, Object value) {
            List<Object> myClassList = myClassListMap.get(key);
            if(myClassList == null) {
                myClassList = new ArrayList<object>();
                myClassListMap.put(key,myClassList);
            }
            myClassList.add(value);
        }
    
        //补充: HashMap的key和value皆可为null,HashTable的key和value皆不可为null. 二者的key皆不可重复,若重复,后添加的会覆盖之前的.
    
    
    //上面传统的场景,可以使用ArrayListMultimap  
    
    Multimap<String, String> multimap = ArrayListMultimap.create();
    multimap.put("fruit", "bannana");
    multimap.put("fruit", "apple");//key可以重复
    multimap.put("fruit", "apple");//value可以重复,不会覆盖之前的
    multimap.put("fruit", "peach");
    multimap.put("fish","crucian");//欧洲鲫鱼
    multimap.put("fish","carp");//鲤鱼
    
    System.err.println(multimap.size());//6
    
    Collection<String> fruits = multimap.get("fruit");
    System.err.println(fruits);//[bannana, apple, apple, peach]
    
    for (String s : multimap.values()) {
        System.err.print(s + " , ");//bannana , apple , apple , peach , crucian , carp ,
    }
    
    multimap.remove("fruit","apple");
    System.err.println(fruits);//[bannana, apple, peach]   注意:这里只remove了一个apple,因此还有一个apple
    
    multimap.removeAll("fruit");
    System.err.println(fruits);//[]
    
    
    #TODO: 如果将multimap 直接返回前端, 返回的数据是 {"empty":false} , 是否可以返回给前端,Lifu不清楚
    
    //get(key) 返回的是collection,如果希望返回的是list,可以选择ListMultimap来接收create()的返回值
    
        ListMultimap<String, String> listMultimap = ArrayListMultimap.create();
        listMultimap.put("fruit", "bannana");
        listMultimap.put("fruit", "apple");
        listMultimap.put("fruit", "peach");
        listMultimap.put("fish","crucian");//欧洲鲫鱼
        listMultimap.put("fish","carp");//鲤鱼
    
        List<String> fruits = listMultimap.get("fruit");
        System.err.println(fruits);//[bannana, apple, peach]
    
    
    
    //对比 HashMultimap
    
        Multimap<String,String> multimap= HashMultimap.create();
        multimap.put("fruit", "bannana");
        multimap.put("fruit", "apple");
        multimap.put("fruit", "apple");
    
        System.err.println(multimap.size());//2
        System.err.println(multimap.get("fruit"));//[apple, bannana]     注意: 这里只有一个apple
  • 相关阅读:
    Java编程规范
    java 编程军规
    数据库编程军规条例
    过滤重复记录(因为关联扩展表)
    根据子部门获取其到根部门的路径
    (原创)defparam的应用(Verilog,CPLD/FPGA)
    (原创)学习MCU的感悟_初级(MCU,经验)
    (原创)基于FPGA的调光流水灯(Verilog,CPLD/FPGA)
    (原创)基于MCU的频率可调,占空比可调的PWM实现(MCU,MCS-51/MSP430)
    (原创)动物照的情感与角度拍摄(摄影,欣赏)
  • 原文地址:https://www.cnblogs.com/txfsheng/p/9510671.html
Copyright © 2011-2022 走看看