Итератор возвращает ошибку для 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(),

Другие вопросы по тегам