2014-04-13 2 views
0

Так у меня есть HashMap, который содержит ключ в виде строк и значение в качестве Целого подсчета этих строк, происходящих в моем Setудаления записей из HashMap в Java

для, например, я бы Hashmap следующего

Key Value 
    abcd 4  (meaning there are 4 duplicate strings of abcd in my Set defined someplace) 
    ----- 13 
    b-b- 7 

and so on.. 

Теперь я пытаюсь удалить все записи пустых строк из моего HashMap. Таким образом, в приведенном выше примере, я хотел бы, чтобы удалить все пустые строки со значением 13. Таким образом, мой полученный HashMap будет

Key Value 
abcd 4 
b-b- 7 

Это мой код, который пытается сделать то же самое. generateFeedbackMap() - это функция, которая возвращает HashMap в рассмотрение. StringIterator - это класс, который я определил, который перебирается через каждый символ моих строк.

for(String key : generateFeedbackMap().keySet()) { 
    StringIterator it = new StringIterator(key); 
    int counter = 0; 
    while(it.hasNext()){ 
     String nextChar = it.next(); 
     if(nextChar.equals("-")){ 
      counter++; 
     } 
     Iterator<Map.Entry<String, Integer>> mapIterator = generateFeedbackMap().entrySet().iterator(); 
     if(counter >= key.length()){ 

      while(mapIterator.hasNext()){ 
       Map.Entry<String, Integer> entry = mapIterator.next(); 
       if(entry.getKey().equals(key)){ 
        mapIterator.remove(); 
       } 
      } 
     } 
    } 
} 

Таким образом, я увеличиваю счетчик везде, где я нахожу символ «-». Когда счетчик равен моей длине строки ключа, что означает, что это пустая строка, я удаляю ее с помощью Map Iterator, но это не удаляет запись с моей карты. Что я делаю не так?

+0

Почему у вас есть все эти символы «-»? Почему бы вам просто не игнорировать их, прежде чем положить их в свой хэш? – CodeCamper

+0

На самом деле это одна часть игры палача, которую я делаю. Мне нужны пустые строки в одном из начальных нормальных режимов, но в настоящее время я работаю в другом режиме, для которого я хотел бы удалить все пустые строки из HashMap. – Htlcs

+0

. У вас есть 1 запись с кучей ---- или у вас есть несколько записей с --s? Вы хотите удалить любую запись, которая только ...? – CodeCamper

ответ

0

Хорошо, ребята, я думаю, я понял решение. Я просто скопировал все мои текущие записи из oldMap в новую определенную HashMap, которая содержала бы хотя бы одну букву в своих ключах. Таким образом, по существу, я избавилась от всех удаления и перебора строк и просто использовать другой HashMap вместо ниже

Map<String, Integer> HelpfulMap = new HashMap<String,Integer>(); 
    for(String key : generateFeedbackMap().keySet()) {    
     StringIterator it = new StringIterator(key); 
     while(it.hasNext()){ 
      String nextChar = it.next(); 
      if(!nextChar.equals("-")){ 
       HelpfulMap.put(key, generateFeedbackMap().get(key)); 
      } 
     } 
    } 

Я не знаю, что я делал раньше. Я пошел на хороший душ и придумал эту идею, и это сработало. Я люблю программировать!

Спасибо всем за ваш вклад!

+0

Это кажется несколько неэффективным: 1. множественные вызовы 'generateFeedbackMap()', 2.multiple 'put', если ключ имеет несколько несимволов, 3. создание новой карты вместо удаления со старой карты. Но если он выполнит свою работу ... – Teepeemm

+0

Да, похоже, но если бы вы могли помочь мне с лучшим решением, чем я был бы очень признателен! – Htlcs

1

generateFeedbackMap() звучит так, будто вы получаете копию базовой карты, и в этом случае удаление ключа из копии не повлияет на базовую карту. Если вы действительно получаете карту, вы должны переименовать свой метод.

Независимо от того, что будет выполнено так же, как и исходный код (но удаляется только из копии).

Map<String,Integer> feedbackMap = generateFeedbackMap(); 
for (String key : feedbackMap.keySet()) { 
    if (key.matches("-+")) { 
     feedbackMap.remove(key); 
    } 
} 

Если вы застряли получить копию базовой карты, то вам необходимо создать новый helpfulMap. Но вы все равно можете использовать регулярное выражение и другие функции Map для ускорения работы:

Map<String,Integer> helpfulMap = new HashMap<>(); 
for (Map.Entry<String,Integer> entry : generateFeedbackMap().entrySet()) { 
    if (! entry.getKey().matches("-+")) { 
     helpfulMap.put(entry.getKey(),entry.getValue()); 
    } 
} 
Смежные вопросы