java- hashmap一个键和多个值替代将值部分存储在List中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java- hashmap一个键和多个值替代将值部分存储在List中相关的知识,希望对你有一定的参考价值。
通常当你在哈希映射中有相同键的多个值时,我找到的答案将使用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(",")
and将它们存储在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]);
}
}
答案
我想知道可以保持hashmap的正常定义并将任何新值附加到旧值(逗号分隔)。
你已经做到了。以低效的方式,但你做到了。
正如Andy Turner在评论中指出的那样,你可以寻找像Guava的MultiMap这样的实现,它允许将单个键映射到多个值。
除此之外,official Map documentation没有报告将一个值添加到另一个值的能力,而只是替换它。在整数的情况下,你可以increment them pretty easily,但其余的你必须自己做或找到一个更有效的方式(例如ArrayList
)。
以上是关于java- hashmap一个键和多个值替代将值部分存储在List中的主要内容,如果未能解决你的问题,请参考以下文章
将值转换为 Spark 数据集中的列(将列的键和值对转换为常规列)[重复]