通常,当您在哈希映射中为同一个键设置多个值时,我找到的答案将使用List
或ArrayList
来存储值部分。例如:
Map<Object,ArrayList<Object>> multiMap = new HashMap<Object,ArrayList<Object>>();
我想知道可以保留hashmap的正常定义并将任何新值附加到旧值(以逗号分隔)。像这样:
Map<String, String> memOf = new HashMap<String, String>();
Map<String, String> subOrg = new HashMap<String, String>();
Map<String, String> email = new HashMap<String, String>();
String line="";
String source="";
String sub="";
String obj="";
String hashKey="";
String hashVal="";
for (Text value : values){ //start iterate over values
line=value.toString();
String[] parts=line.trim().split(",");
source=parts[0].trim();
sub=parts[1].trim();
obj=parts[2].trim();
hashKey=sub;
if (source.equals("memberOf")){
hashVal=memOf.get(hashKey);
if (hashVal!=null){
hashVal=hashVal+","+obj;
memOf.put(hashKey, hashVal);
}
}
}
前面的代码是填充哈希映射,旁边读取单个值使用split(",")
并将它们存储在String数组中。类似的东西:
for (String key1 : memOf.keySet()) {
x=key1;
String[] y=memOf.get(x).toString().split(",");
int numberOfItems = y.length;
for (int i=0; i<numberOfItems; i++){
System.out.println(y[i]);
}
}
答案 0 :(得分:0)
我想知道可以保留hashmap的正常定义并将任何新值附加到旧值(以逗号分隔)。
你已经做到了。以低效的方式,但你做到了。
正如Andy Turner在评论中所指出的那样,您可能会寻找像Guava MultiMap这样的实现,它允许将单个键映射到多个值。
除此之外,official Map documentation 不会报告将一个值添加到另一个值的功能,只会替换它。对于整数,您可以increment them pretty easily,但是对于其他人,您必须自己做或者找到更有效的方法(例如ArrayList
)。