2016-10-10 5 views
0

enter image description here У меня есть hashmap, который мне нужно сравнить значения массива String с определенными строками и удалить те, которые равны. В этом случае я знаю String [] с определенным индексом = «RES», но когда я повторяю оператор if (равенство), каждый раз возвращает false. Должен ли я беспокоиться о переопределении .equals() при простом расширении hashmap? Что не так с утверждением if?.Equals() не работает во время итерации hashmap

public void filter(){ 
    Iterator<Map.Entry<String, String[]>> iter = this.entrySet().iterator(); 
    while(iter.hasNext()){ 
     Map.Entry<String,String[]> entry = iter.next(); 
     String[] current = entry.getValue(); 
     if(current[0].trim().equalsIgnoreCase("RES")){ 
      this.remove(entry.getKey()); 
     }   
    } 
} 
+2

Что такое 'this.remove()'? –

+0

использовать отладчик, посмотреть, что значение current [0], равенство строк не имеет проблем –

+0

Ничего не похоже на инструкцию 'if', но вы получите' ConcurrentModificationException', если вы используете 'remove (key) 'вместо' iter.remove() '. – Zircon

ответ

1

Заменить:

this.remove(entry.getKey()); 

С:

iter.remove(); 
+0

Спасибо! Я просто поймал это. Исключением параллельной модификации, похоже, не является проблема. Когда текущий [0] = «RES», (текущий [0] .trim (0) .equalsIgnoreCase («RES»)) возвращает false. – rickardx

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