Javaのようなものがありますか
map.putIfValueNotNull(key, value)
そのため、明示的なチェックなしでnullでない場合にのみ、マップに値を配置できます。
computeIfAbsent()
関数を使用して、キーがすでにマップに存在するかどうかをチェックし、存在する場合は何もしません。キーが存在しない場合は、計算された値がnullかどうかをチェックし、nullでない場合はマップに入れます。
map.computeIfAbsent(key, val -> value);
注意してください、putIfAbsnet
はnull値をマップに入れます。
_org.Apache.commons.collections4.MapUtils
_にメソッドsafeAddToMap()
が含まれていることは知っていますが、value
がnull
の場合、必要な_empty string
_が追加されます。
HashMap
をオーバーライドして新しいメソッドを実装するバリアントは好きではありません。この場合、他の実装ではTreeMap
やLinkedHashMap
などがないためです。
この関数が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;
}
_
私は以下を試しましたが、うまくいくようです。
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}
同じキーを持つ値がすでにマップにある場合は、置き換えられることに注意してください。
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値が含まれないことは明らかです。