2013-02-10 111 views
0

我想让我的代码干净添加有以下麻烦。我想通过以下方式添加如何正确联合HashMap <String,ArrayList <Object>>和HashMap <String,Object>

HashMap<String,Object> currentItem;

到我的存储

HashMap<String, ArrayList<Object>> storage;

按照键添加的currentItem所有ObjectstorageArrayList<Object>(他们都是一样)。

这是我的变种如何按照键

if (storage.containsKey("article_link")) 
{Object tmpObj; 
    ArayList<Object> listTemp; 
      tmpObj = currentItem.get("article_link"); 
     listTemp = storage.get("article_link"); 
     listTemp.add(tmpObj); 
     storage.put("article_link", listTemp); 

     tmpObj = o.get("image"); 
     listTemp = storage.get("image"); 
     listTemp.add(tmp); 
     storage.put("image", rrr); 
} 

,这对于每一个HashMap的关键CURRENTITEM添加到存储。我可以编写重复代码的特殊功能,但我希望它可以更容易解决。

谢谢。

+0

你需要调用后检查空'listTemp = output.get()'。当前项目映射可能包含输出映射中不存在的键。 – user949300 2013-02-10 17:41:45

+0

你需要什么不清楚,但你可能会对番石榴的MultiMap感兴趣(本质上是一些'Map >'。 – assylias 2013-02-10 17:43:28

+0

@ user949300更新代码。对不起,输出“这是我的”存储“ – pavelartlover 2013-02-10 17:45:04

回答

2

这里需要注意的一点是,一旦修改它,您不需要再次将新的ArrayList的映射。这些更改将自动反映在Map中,因为您所拥有的是对实际ArrayList对象的引用。其次,你不需要做所有的事情。hard-coding。您可以简单地遍历currentItem地图和每个key-value对,检查中是否存在key,如果找到,只需更新相应的List即可。

这里是你如何做到这一点: -

for (Entry<String, Object> entry: currentItem.entrySet()) { 
    if (storage.containsKey(entry.getKey()) { 
     storage.get(entry.getKey()).add(entry.getValue()); 

    } else { 
     List<Object> newEntry = new ArrayList<Object>(); 
     newEntry.add(entry.getValue()); 
     storage.put(entry.getKey(), newEntry); 
    } 
} 
+0

谢谢你的回答,但在这种情况下,我们必须使用“add”而不是“put”。无论如何,谢谢 – pavelartlover 2013-02-10 18:25:02

+1

是的,应该是一个add(),并且如果存储不包含密钥,那么你可能想要创建一个新的List(如另外两个答案中所示)最后,考虑同步这个方法。如果两个不同的线程正在添加到存储中,可能会发生这种情况。 – user949300 2013-02-10 18:34:59

+0

@pavelartlover。啊!对,它应该是'add'。编辑它。:) – 2013-02-10 19:45:59

0
for (Entry<String, Object> entry: currentItem.entrySet()) { 
    if (!storage.containsKey(entry.getKey()) { 
     storage.put(new ArrayList<Object>()); 
    } 
    storage.get(entry.getKey()).put(entry.getValue()); 
} 
0
Set<Entry<String,Object> entries = currentItem.entrySet(); 
Iterator<Entry<String,Object>> i = entries.iterator(); 
while(i.hasNext()) { 
    Entry<String,Object> e = i.next(); 
    if(storage.containsKey(e.getKey()) { 
     storage.get(e.getKey()).add(e.getValue()); 
    } 
    else { 
     ArrayList l = new ArrayList(); 
     l.add(e.getValue()); 
     storage.put(e.getKey(),l); 
    } 
} 
相关问题