Перебор карт меток и их удаление - PullRequest
2 голосов
/ 30 июня 2019

Я написал следующий код:

final Iterator<Entry<Label, Label>> it = dataLabels.entrySet().iterator();
while (it.hasNext()) {
    final Map.Entry<Label, Label> pairs = it.next();
    dataLabels.remove(pairs.getKey());
    pairs.getValue().dispose();
    pairs.getKey().dispose();
}

Он перебирает карту меток (тип: Map<Label, Label>) и избавляется от каждой из них (после удаления ее с карты).

Мне кажется, что этот код не выполняет то, что я ожидаю.Я думаю, что он перестает повторяться после первого цикла (попытался добавить печатное сообщение, чтобы увидеть поведение).

Код выполняет то, что я ожидаю (избавляясь от всех меток)?Если нет, то как это исправить?

Ответы [ 2 ]

0 голосов
/ 30 июня 2019

Вы не можете вызвать remove на карте во время итерации записей.

Вы можете использовать метод итератора remove, как показано в другом ответе, или просто очистить карту вконец:

for (Map.Entry<Label, Label> dataLabel : dataLabels.entrySet()) {
  dataLabel.getKey().dispose();
  dataLabel.getValue().dispose();
}
dataLabels.clear();

или использование потоков:

dataLabels.forEach((key, value) -> { key.dispose(); value.dispose(); });
dataLabels.clear();
0 голосов
/ 30 июня 2019

Если вы хотите удалить одну за другой, попробуйте это,

    Iterator<Map.Entry<Label,Label>> i = dataLabels.entrySet().iterator();
    while (i.hasNext()) {
       Map.Entry<String,String> entry = i.next();
       // Do something
       i.remove();
    }

или вы можете очистить всю карту, используя dataLabels.clear()

Используя dataLabels.clear(), вы можете повторно использовать карту dataLabels.

Если вам не нужно использовать его повторно, установите значение null

dataLabels = null;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...