0

我想让我的代码干净添加有以下麻烦。我要加

HashMap<String,Object> currentItem;

到我的仓库

HashMap<String, ArrayList<Object>> storage;

通过以下方式:

根据键添加所有ObjectcurrentItemArrayList<Object>storage(它们都是相同的)。

这是我的变体如何根据键将 currentItem 添加到存储中

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);
}

这适用于每个哈希映射键。我可以为重复代码编写特殊功能,但我希望它可以更容易解决。

谢谢。

4

3 回答 3

2

这里要注意的一件事是,一旦你修改它,你不需要再次为新的arraylist 放置映射。更改将Map自动反映在,因为您所拥有的是对实际ArrayList对象的引用。

其次,你不需要做所有这些hard-coding。您可以简单地遍历您的currentItem地图,并为每一key-value对检查keyin的存在storage,如果找到,只需更新相应的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);
    }
}
于 2013-02-10T17:43:17.590 回答
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());
}
于 2013-02-10T17:44:30.027 回答
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);
    }
}
于 2013-02-10T17:48:12.087 回答