Как обновить / установить новое значение при повторении объекта Hash Map в java

#java #hashmap

#java #hashmap

Вопрос:

Мне нужна помощь в обновлении значений при повторении объекта Hash Map.

Предположим, у меня есть один объект Hash Map, подобный этому ,

 HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("X", "D10023A");
hashMap.put("DATE", "5/1/2020");
hashMap.put("Y", "");
hashMap.put("Z", "");
hashMap.put("A", "");
  

Мне нужно выполнить итерацию по этому объекту Hash Map, при итерации нам нужно проверить условие, т.е. если Ключ = DATE и его значение = «5/1/2020», тогда нужно обновить / установить другой ключ, т. е. значения Y, Z, A, от пустых («») строк до некоторых целых значений.

Пожалуйста, помогите мне здесь.

Комментарии:

1. Зачем вам нужно повторять HashMap , если вы знаете, какой ключ проверять и какие ключи обновлять?

2. Поскольку у меня есть больше подобных объектов, необходимо выполнить итерацию, и значения ДАТЫ могут отличаться, поэтому мне нужно проверить, если DATE = 5/1/2020, то только тогда мне нужно обновить и другие значения.

3. Честно говоря, похоже, что вы используете карту для чего-то, для чего она на самом деле не предназначена. Вы уверены, что вам не подошел бы пользовательский класс, который инкапсулирует ваши свойства X, Y, Z, A и Date в один объект?

4. В Map можно хранить только одно значение под ключом. Если нужно сохранить несколько значений под одним ключом, следует использовать Map<K, List<V>> . Но опять же … можно было бы выполнить итерацию по Listobtained by map.get(«DATE»)`, а не по самой карте. Я поддерживаю комментарий @OHGODSPIDERS.

5. Поскольку здесь проблема возникает, когда я выполняю итерацию с entrySet (), я уже нахожусь в одном индексе. Мой вопрос в том, есть ли у нас какая-либо возможность выполнить обновление в следующих записях, хотя мы находимся в одном индексе?

Ответ №1:

Map.Entry имеет обратную связь с Map экземпляром. Т.е. когда вы изменяете Entry , Map также изменяется.

 public static void main(String[] args) throws IOException {
    Map<String, String> map = new HashMap<>();
    map.put("X", "D10023A");
    map.put("DATE", "5/1/2020");
    map.put("Y", "");
    map.put("Z", "");
    map.put("A", "");

    if ("5/1/2020".equals(map.get("DATE"))) {
        for (Map.Entry<String, String> entry : map.entrySet()) {
            if ("DATE".equals(entry.getKey()))
                continue;
            if ("".equals(entry.getValue()))
                entry.setValue("666");
        }
    }
}