web-dev-qa-db-ja.com

nullでない場合、値をマップに入力します

Javaのようなものがありますか

map.putIfValueNotNull(key, value)

そのため、明示的なチェックなしでnullでない場合にのみ、マップに値を配置できます。

9
Zimbo Rodger

computeIfAbsent()関数を使用して、キーがすでにマップに存在するかどうかをチェックし、存在する場合は何もしません。キーが存在しない場合は、計算された値がnullかどうかをチェックし、nullでない場合はマップに入れます。

map.computeIfAbsent(key, val -> value);

注意してください、putIfAbsnetはnull値をマップに入れます。

11
HDCase

_org.Apache.commons.collections4.MapUtils_にメソッドsafeAddToMap()が含まれていることは知っていますが、valuenullの場合、必要な_empty string_が追加されます。

HashMapをオーバーライドして新しいメソッドを実装するバリアントは好きではありません。この場合、他の実装ではTreeMapLinkedHashMapなどがないためです。

この関数がApacheなどの利用可能なライブラリに存在することは知りません。

したがって、私のプロジェクトでは、自分で実装する必要があります。

_public static <K, V> Map<K, V> addNotNull(Map<K, V> map, K key, V value) {
    if(value != null)
        map.put(key, value);

    return map;
}
_
6
oleg.cherednik

私は以下を試しましたが、うまくいくようです。

Map<String, String> map = new HashMap<>();
String object1 = "blah";
String object2 = null;
map.compute("key1", (k, v) -> object1);
map.compute("key2", (k, v) -> object2);

System.out.println(map);

この方法が望ましくないパフォーマンスやその他の考慮事項があるかどうかはわかりません。きれいに見えます。 object1またはobject2がnullの場合、マップに表示されません。これを実行すると、次の結果が得られます。

{key1=blah}

同じキーを持つ値がすでにマップにある場合は、置き換えられることに注意してください。

4
gaoagong

Java documentation に従って、指定されたキーがまだ値に関連付けられていない(またはnullにマップされている)場合、指定されたマッピングを使用してその値を計算しようとします関数を呼び出し、nullでない限り、このマップに入力します。

簡単な例:

public static void main(String[] args) {
    HashMap<String, String> map = new HashMap<>();
    map.put("1", "ONE");
    map.put("2", null);

    map.computeIfAbsent("3", val -> "THREE");
    map.computeIfAbsent("4", val -> null);

    System.out.println(map);
}

これの出力は-

{1=ONE, 2=null, 3=THREE}

通常のputメソッドで追加された場合は存在するが、computeIfAbsentメソッドで追加された場合は、出力にnull値が含まれないことは明らかです。

1
JavaFreak