条件 - なぜJavaはMapにputIfAbsent(key、supplier)メソッドを持っていないのですか?



java エントリポイント 条件 (1)

あなたが欲しいものをcomputeIfAbsentいませんか?

指定されたキーがまだ値に関連付けられていない場合(またはnullにマップされている場合)は、指定されたマッピング関数を使用してその値を計算し、null以外の場合はこのマップに入力します。

実装は次のようなものです:

if (map.get(key) == null) {
    V newValue = mappingFunction.apply(key);
    if (newValue != null) {
         map.put(key, newValue);
    }
}

したがって、投稿したSupplier<V>署名ではなく、それに近いです。 マッピング関数の引数としてkeyを持つことは間違いありません。

私は最近、java.util.MapのputIfAbsent(...)バージョンを望んでいます。これは、何らかのファクトリメソッドを提供し、Objectがインスタンス化されていない場合にインスタンス化します。 これは、多くのコードを簡素化します。

ここに私の修正されたインターフェイスがあります:

import java.util.Map;
import java.util.function.Supplier;

/**
 * Extension of the Map Interface for a different approach on having putIfAbsent
 * 
 * @author Martin Braun
 */
public interface SupplierMap<K, V> extends Map<K, V> {

    public default V putIfAbsent(K key, Supplier<V> supplier) {
        V value = this.get(key);
        if(value == null) {
            this.put(key, value = supplier.get());
        }
        return value;
    }

}

今私の質問:これを行うための別の(簡単な)方法があるのか​​、それともJava APIの何かを見過ごしただけですか?





map