Итератор возвращает ошибку для TreeMap в Java
У меня есть TreeMap, определенный как:
final TreeMap<ArrayList<String>,String> mymap = new TreeMap<ArrayList<String>,String>(comparator);
Когда я пытаюсь повторить это так:
Iterator iter = (Iterator) mymap.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
}
Я получаю сообщение об ошибке, как метод hasNext() не определен для типа ObjToIntMap.Iterator во 2-й строке и нескольких маркеров в этой строке - Map.Entry является необработанным типом. Ссылки на универсальный тип Map.Entry должны быть параметризованы в 3-й строке.
Каков источник этой ошибки, и как я могу это исправить?
4 ответа
Может быть, вы импортировали неправильно Iterator
учебный класс? Вы уверены, что импортировали java.util.Iterator
и нет другого класса из другого пакета, который также называется Iterator
?
Если вы импортировали правильный Iterator
Класс, вы можете удалить Typecast и добавить универсальный тип в итератор:
Iterator<Map.Entry<ArrayList<String>, String>> iter = mymap.entrySet().iterator()
Вы знаете, что вы не можете изменить ключ после его добавления, и его конкретный тип не должен иметь значения (или использоваться в идеале)
final Map<List<String>,String> mymap = new TreeMap<>(comparator);
for (Map.Entry<List<String>, String> entry : mymap.entrySet()) {
}
Пытаться
Iterator<Entry<ArrayList<String>, String>> iter = mymap.entrySet().iterator();
while(iter.hasNext()) {
Entry<ArrayList<String>, String> entry = iter.next();
}
Вы можете использовать цикл for-each для итерации по карте:
for(Map.Entry<List<String>,String> entry : mymap.entrySet()) {
List<String> key = entry.getKey();
String value = entry.getValue();
// Do something useful with the key and value
}
Или вы можете просто перебрать ключи, используя mymap.keySet()
или значения mymap.calues()
,