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

Возвращает:

текущее (существующее или вычисленное) значение, связанное с указанным ключом, или ноль, если вычисленное значение равно нулю

Другие вопросы по тегам