2011-06-13 5 views
2

я задавался вопросом, почему я эту ошибку, когда я пытался сделать это:цикл: не может быть решена с переменной

Map<Integer, List<String>> map = (Map<Integer, List<String>>) parameters; 

for(Integer i : map.keySet()) { 
    tableFiles.setWidget(row, 0, addPanelFile(String.valueOf(i))); 
    row++; 
    for(map.get(i)) { 

    } 
} 

Почему я не могу быть решены переменной?

+1

Самый простой и эффективный способ для перебора карте, если вам нужно как ключ и значение для итерации через 'Set >' 'возвращаемый entrySet()'. Тогда вам не нужно делать, вы уже имеете значение в 'Entry'. –

ответ

10

Для петли неправильной формы.

Изменить

for(((Map<Integer, List<String>>) parameters).get(i)) { 

} 

в

for(SomeType someVar : ((Map<Integer, List<String>>) parameters).get(i)) { 

} 

и вы должны получить более сообщения об ошибке.

+2

Кроме того, почему бы не просто использовать «карту», ​​которая уже была выпущена? –

+0

@Mark Peters: ну, это опечатка. Отредактировано – l0r3nz4cc10

+0

Спасибо, я думаю, что немного устал, должен был это видеть – l0r3nz4cc10

0

Что-то из этого эффекта. foreach использует Iterator для итераций;

Map<Integer, List<String>> map = (Map<Integer, List<String>>) parameters; 

for (Integer i : map.keySet()) { 
    tableFiles.setWidget(row, 0, addPanelFile(String.valueOf(i))); 
     row++; 
    for (String s: map.get(i)) { 

    } 
} 
+1

Вам не нужно выставлять итератор, 'keySet(). Итератор()' не возвращает 'Iterator ',' Iterator' не является 'Итерируемым', и вы хотите, чтобы' '' '' '' '' '' 'во внутреннем цикле. –

+0

Спасибо, я думаю, что немного устал, должен был увидеть это – l0r3nz4cc10

+0

@Mark Peters, спасибо, но 'Map.get()' возвращает 'List '. Проверьте отредактированный вопрос OP. –

Смежные вопросы