我創建了一個類Foo
,該類的方法toArray()
返回Array<Int>
。在Java(或Scala)中對HashMap的HashMap進行迭代
現在,我有一個HashMap將字符串映射到HashMaps,它將對象映射到Foo。那就是:
HashMap<String,HashMap<Object,Foo>>
我想創建類型的新對象:即通過調用函數指定者()在原HashMap中的每一個元素美孚獲得
HashMap<String,HashMap<Object,Array<Int>>>
。
要做到這一點,我通常會做這樣的事情:
public static HashMap<String,HashMap<Object,Array<Int>>> changeMap(Map mpOld) {
Object key2;
String key1;
Iterator it2;
HashMap<String,HashMap<Object,Array<Int>>> mpNew=
new HashMap<String,HashMap<Object,Array<Int>>>()
Iterator it1 = mpOld.keySet().iterator();
while (it1.hasNext()) {
key1=it1.next();
it2= mpOld.get(key1).keySet().iterator();
mpNew.put(key1,new HashMap<Object,Array<Int>>())
while (it2.hasNext()) {
key2=it2.next();
mpNew.get(key1).put(key2,mpOld.get(key1).get(key2).toArray());
//TODO clear entry mpOld.get(key1).get(key2)
}
//TODO clear entry mpOld.get(key1)
}
return mpNew;
}
類似的代碼工作得很好,但HashMap中的尺寸太大容納他們兩個在內存中。正如你所看到的,我添加了兩點,我想清除一些條目。問題是,如果我這樣做,我會得到一個併發錯誤,或者迭代器循環剛剛結束。
我想知道是否有更好的方式來遍歷地圖並複製信息。
此外,我在一個Scala項目中工作,但在這裏我必須使用Java類型來解決一些兼容性問題。儘管Java.util.HashMap
不是迭代器,但Scala可能有一些隱藏的功能來處理這個問題?
感謝,
謝謝,不過雖然我使用Scala開發項目中,包含HashMap是Java HashMaps這樣,所以你不能要求他們mapVAlues。 使用JavaConversions解決這個問題嗎? – Skuge 2010-07-15 11:11:37
你能解決你的問題嗎?我的編輯有幫助嗎? – 2010-07-19 07:01:51