#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");
}
}
}