动态添加新列表到Map

时间:2014-10-24 16:38:12

标签: java arrays arraylist hashmap

我有这样的数组  006247241 0590040100000124 0590020100000125 0590020450000124 006247242 0590040100000129 ...现在,如果数组中任何值的长度介于1到9之间,它将成为一个键,其后的其余值立即成为我使用Map的值。因此,在上述情况下, 006247241 成为密钥,0590040100000124 0590020100000125 0590020450000124成为该密钥的值,依此类推。我的代码是这样的(以上所有值都在一个数组 cellValues [] )。

Map<String, List<String>> map = new HashMap<String, List<String>>();
            List<String> list = new ArrayList<String>();

            String key="#";

            for(int k=0;k<cellValues.length;k++){
                if(cellValues[k]!=null){
                    if(cellValues[k].length()<=9 && cellValues[k].length()>0 ){
                        map.put(key,list);
                        //System.out.println("MAP:"+map);
                        key=cellValues[k];
                    }else{
                        list.add(cellValues[k]);
                    }
                }
            }

我面临的问题是如何为每个新密钥添加新列表。上面的代码只是将所有值附加到数组中的每个键,输出就像这样

Key = 006247241 Value = [#,0590040100000124,0590020100000125,0590020450000124,0590040100000129

Key = 006247242 Value = [#,0590040100000124,0590020100000125,0590020450000124,0590040100000129

2 个答案:

答案 0 :(得分:2)

您每次都在重复使用相同的列表。如果您想为每个key添加一个新列表,则应在每次将新的key,value对添加到地图中时创建它:

Map<String, List<String>> map = new HashMap<String, List<String>>();
String key="#";

for(String value : cellValues){
    if(value.length()<=9){
         // its a key
         key = value;  
         map.put(key, new ArrayList<String>());
    }else{
        // its a list value
        map.get(key).add(value);
    }
}

您不再需要声明列表,因为您正在为每个键使用新列表,并且当添加到列表时,您从地图中获取对列表的引用,方法是使用最后一个键:map.get(key).add(value);

答案 1 :(得分:1)

我相信这就是你所追求的。如果没有,请告诉我。

Map<String, List<String>> map = new HashMap<String, List<String>>();

    String key="#";

    for(int k=0;k<cellValues.length;k++){
        if(cellValues[k]!=null){
            if(cellValues[k].length()<=9 && cellValues[k].length()>0 ){
                key=cellValues[k];
                map.put(key, new ArrayList<String>());
            }else{
                if(!map.get(key).contains("#")){
                    map.get(key).add("#");
                }
                map.get(key).add(cellValues[k]);
            }
        }
    }
    for(String k : map.keySet()){
        System.out.println("Key = " + k + " Values = " + map.get(k).toString());
    }
}