Я создал класс Foo
, который имеет метод toArray()
, который возвращает Array<Int>
.Итерация по HashMap HashMaps в Java (или Scala)
Теперь у меня есть сопоставление HashMap строк с HashMaps, которые отображают объекты в Foo. То есть:
HashMap<String,HashMap<Object,Foo>>
И я хочу, чтобы создать новый объект типа:
HashMap<String,HashMap<Object,Array<Int>>>
Это достигается путем вызова функции ToArray() для каждого элемента Foo в исходном HashMap.
Для этого я обычно бы сделать что-то вроде:
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 для проекта, HashMaps являются Java HashMaps, так что вы не можете назвать mapVAlues на них. Есть ли способ решить эту проблему с помощью JavaConversions? – Skuge
Вы смогли решить вашу проблему? Помогло ли мое редактирование? –