我创建了一个类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