Choosing the data structure for orgaininsng data with list of values in java

前端 未结 2 1494
盖世英雄少女心
盖世英雄少女心 2021-01-19 06:27

I have a map as shown below in which there is a key and values is of type List:

Map newdatamap = new HashMap<&g         


        
2条回答
  •  时光取名叫无心
    2021-01-19 07:00

    I would do this:

    Map> dataMap = new HashMap<>();
    dataMap.put("B1".hashCode()+"RtyName".hashCode(), Arrays.asList("weepn", "weepfnb", "eedgeft", "xbteehy"));
    dataMap.put("B1".hashCode()+"rtyRate".hashCode(), Arrays.asList("deed", "ww", "terrty", "hteetyure"));
    dataMap.put("B2".hashCode()+"RtyName".hashCode(), Arrays.asList("SSSweepn", "wpefSSSnb", "GGeGdgeft", "xbteYYYYhy"));
    dataMap.put("B2".hashCode()+"rtyRate".hashCode(), Arrays.asList("WWded", "wTeTYw", "YYYYtrerty", "IIIehttyure"));
    

    Which would represent:

    B1, RtyName  ----> "weepn", "weepfnb", "eedgeft", "xbteehy"
    B1, rtyRate ----->"deed", "ww", "terrty", "hteetyure"
    
    B2, RtyName  ----> "SSSweepn", "wpefSSSnb", "GGeGdgeft", "xbteYYYYhy"
    B2, rtyRate ----->"WWded", "wTeTYw", "YYYYtrerty", "IIIehttyure"
    

    Note that hashCode is just a convient function from the String class that meets my needs. You could roll your own that returns a String key (or really anything else) if you preferred.

    Actually since your original method didn't require an order independent function, you could really even concatenate the String keys to use as a new key:

    dataMap.put("B1"+"RtyName", Arrays.asList(/*your list here*/));
    

    This is a little less convenient (and not as "good" programmatically) than the first method, but still much better than nesting Map classes. (And makes keys much easier to recognize when outputted than hashCode.)

    Two-way Mapping

    Values as Keys

    If you want each List value to map to keys as well as the other way around, you need a second Map:

    Map, String> valueMap = new HashMap<>(); //New map for value->key 
    for(String key: dataMap.keySet()) //Get all keys
        valueMap.put(dataMap.get(key), key); //Create mapping value->key
    

    Each Item in Value as a Key

    If you want each String item in the values list to map to keys as well as the other way around, you need a second Map:

    Map itemMap = new HashMap<>(); //New map for item->key mapping
        for(String key: dataMap.keySet()) //Get all keys and iterate through
            for(String item: dataMap.get(key)) //For each item in your value list
                itemMap.put(item, key); //Create new mapping item->key
    

提交回复
热议问题