Работа с интерфейсом Map

187
20 ноября 2017, 17:39

Добрый день, подскажите пожалуйста, никак не могу справиться с задачкой. Есть HashMap с данными, . По ней делаю перебор. Удаляю из нее элемент и естественно, у меня key с данным номером удален, и когда идет перебор далее, у меня NullPointer. Как можно удалить элемент, но так, чтобы key сместился? Я уже и копировал в другую и что только не делал, никак. Может у кого-то есть способ? или знаете как безболезненно удалять, я и через Iterator делал, все равно нет в итоге при повторном переборе этого key.

Последняя мысля была такая

HashMap<Integer, Wagon> copy = new HashMap<Integer, Wagon>(tempMapOfWagons);
for (Map.Entry<Integer, Wagon> pair: copy.entrySet()){
       if (pair.getKey().equals(getKeyNumber))
       System.out.println(getKeyNumber);
       tempMapOfWagons.remove(getKeyNumber);
 }

А так получаю ConcurrentEx

tempMapOfWagons.remove(getKeyNumber);
int i = 0;
for (HashMap.Entry<Integer, String> m : tempMapOfWagons.entrySet()) {
      mapNewOfWagons.put(i, m.getValue());
      i++;
}

При работе с итератором делал так, переписывал в новую мапу, смещая элементы

int i = 0;
for (Iterator<Map.Entry<Integer, Wagon>> iterator = tempMapOfWagons.entrySet().iterator(); iterator.hasNext(); ) {
     Map.Entry<Integer, Wagon> e = iterator.next();
     if (e.getKey().equals(getKeyNumber)) {
            iterator.remove();
            iterator.next();
     } else {
            mapNewOfWagons.put(i, e.getValue());
            i++;
     }
 }
Answer 1

Вот вам пример удаления значения из Map

public static void main(String[] args) {

Map <Integer, String> pair = new HashMap<>();
pair.put(1, "one");
pair.put(2, "two");
pair.put(3, "three");
pair.put(4, "four");
pair.put(5, "five");
Iterator<Map.Entry<Integer, String>> iterator = pair.entrySet().iterator();
while (iterator.hasNext()){
    Map.Entry<Integer, String> nextElement = iterator.next();
    Integer key = nextElement.getKey();
    String value = nextElement.getValue();
    if (key==3) iterator.remove();
}
pair.forEach((k,v)->{System.out.println(k+" * " + v);});
READ ALSO
Java проблема с DriverManager.getConnection(&hellip;)

Java проблема с DriverManager.getConnection(…)

Здравствуйте, возникла проблема с тем, что я делаю war проект, и возникает проблема при запуске Tomcat с DriverManagergetConnection(

175
Как сослаться на ресурс в классе

Как сослаться на ресурс в классе

Есть класс RadioPlayer, который реализует класс для проигрывания и остановки плеераИспользуется ExoPlayer

150
Чтение arraylist с External storage

Чтение arraylist с External storage

Есть файл sampletxt во внешней памяти, у которого такая структура [Строка1, Строка2]

162