Java map.get(key) - 自动执行 put(key) 并在 key 不存在时返回?

2022-08-31 13:08:43

我厌倦了以下模式:

value = map.get(key);
if (value == null) {
    value = new Object();
    map.put(key, value);
}

此示例仅触及要编写的额外代码的表面,当您具有表示多维结构的嵌套映射时。

我确信某个地方存在一些东西来避免这种情况,但我的谷歌搜索工作没有产生任何相关的东西。有什么建议吗?


答案 1

java.util.concurrent.ConcurrentMap 

和从 Java 8

Java.util.Map

putIfAbsent(K key, V value) 

它返回现有值,如果为 null,则插入给定值。因此,如果键不存在任何值,则返回 null 并插入给定值,否则返回现有值

如果您需要对值进行惰性求值,则有

computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)

答案 2

Java 8为Map添加了不错的方法:computecomputeIfPresentcomputeIfAbsent

要实现您的需求:

Object existingOrCreated = map.computeIfAbsent(key, (k) -> new Object());