Nested Hashmap: альтернатива putIfAbsent, которая не требует нулевой проверки и ручного получения?
У меня есть вложенный HashMap
выглядит так: HashMap<String, HashMap<String,Object>>
,
Я создал add
способ заполнить HashMap
private void add(String currentVersion, String targetVersion, Object object) {
HashMap <String, HashMap <String, Object >> nestedMap = definedUpdatePlans.putIfAbsent(currentVersion, new HashMap());
if (nestedMap == null) {
nestedMap = definedUpdatePlans.get(currentVersion);
}
nestedMap.put(targetVersion, object);
}
Как видите, я добавлю вложенную карту, если она отсутствует. Если он уже присутствовал, я получу текущее значение в качестве возвращаемого значения. В случае если он отсутствовал, putIfAbsent
возвращается null
который требует, чтобы я сделал нулевую проверку и вручную заполнил переменную.
Это кажется не очень чистым, но я не знаю лучшего способа.
Есть ли способ добавить значение, если оно не существует, и продолжать работать с новым или уже существующим значением более свободно?
1 ответ
Использование computeIfAbsent
:
private void add(String currentVersion, String targetVersion, Object object) {
definedUpdatePlans.computeIfAbsent(currentVersion, k -> new HashMap())
.put(targetVersion, object);
}
Возвращает:
текущее (существующее или вычисленное) значение, связанное с указанным ключом, или ноль, если вычисленное значение равно нулю