我有这样的数组 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
答案 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());
}
}