Помогите Проблема с отправкой сообщения (HashMap)

nachzehrer

Ньюби
Баллы
1
Имя в Minecraft
n4chzehrer
Привет, нужна помощь вот с этим:
upload_2021-12-18_21-23-40.png
В hashmap занесены 2 игрока, после того как значение переходит на ноль и пришло время удалять игроков из hashmap'a, удаляется только один игрок и сообщение о истечении времени приходит только одному игроку.
 
Во-первых, насколько я понял - метод replaceAll сразу автоматически проходит по всему Map, поэтому это очень грубая ошибка пихать его в forEach. А так получается у тебя цикл в цикле получается и скорее всего значения уходят в минус (можно было бы сделать дебаг, чтобы понять, что творится внутри HashMap). Просто вынеси метод replaceAll перед forEach.

Во-вторых, зачем условие if (pvp.time.get(k) == 0), если у тебя значение уже идет в .forEach((k,v)) -> //v - твое значение. Сразу проверяй переменную v. if (v == 0)

Пока что такие советы. Нужно тестировать и проверять.
 
ConcurrentModificationException для тебя шутка какая-то? Нельзя удалять элементы во время итерации.
 
Во-первых, насколько я понял - метод replaceAll сразу автоматически проходит по всему Map, поэтому это очень грубая ошибка пихать его в forEach. А так получается у тебя цикл в цикле получается и скорее всего значения уходят в минус (можно было бы сделать дебаг, чтобы понять, что творится внутри HashMap). Просто вынеси метод replaceAll перед forEach.

Во-вторых, зачем условие if (pvp.time.get(k) == 0), если у тебя значение уже идет в .forEach((k,v)) -> //v - твое значение. Сразу проверяй переменную v. if (v == 0)

Пока что такие советы. Нужно тестировать и проверять.
Спасибо, решено.
 
ConcurrentModificationException для тебя шутка какая-то? Нельзя удалять элементы во время итерации.
Для такого нужно использовать Iterator. Правильно ж? Вот в нем можно удалять элементы во время итерации.
 
Для такого нужно использовать Iterator. Правильно ж? Вот в нем можно удалять элементы во время итерации.
Да, it.remove. Но я бы сделал так:
PHP:
map.entrySet().removeIf(e -> {
    if (e.setValue(e.getValue() - 1) - 1 <= 0) {
        System.out.println(e.getKey());
        return true;
    }
    return false;
});
 
Последнее редактирование:
Назад
Верх