0

コードをクリーンに追加したいのですが、次のような問題があります。追加したい

HashMap<String,Object> currentItem;

私のストレージに

HashMap<String, ArrayList<Object>> storage;

次の方法で:

キーに応じてのすべてObjectを追加します(すべて同じです)。currentItemArrayList<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

ここで注意すべきことの1つは、変更した後は、新しいarraylistのマッピングを再度配置する必要がないことです。Map実際のArrayListオブジェクトへの参照であるため、変更は自動的に反映されます。

第二に、あなたはそれをすべて行う必要はありませんhard-coding。マップを反復処理するだけで、ペアcurrentItemごとにinの存在を確認し、見つかった場合は、対応するを更新するだけです。key-valuekeystorageList

これを行う方法は次のとおりです。-

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 に答える