Java の Map 操作を Null セーフで行いたい場合、Apache Commons Collections の MapUtils を使うと良いです。
Map インスタンス
// 要素あり
Map<String, Object> map = new HashMap<>();
map.put("str", "あいう");
map.put("int", 123);
map.put("bool", true);
// 空
Map<String, Object> emptyMap = new HashMap<>();
isEmpty
MapUtils.isEmpty(map); // false
MapUtils.isEmpty(emptyMap); // true
MapUtils.isEmpty(null); // true
isNotEmpty
MapUtils.isNotEmpty(map); // true
MapUtils.isNotEmpty(emptyMap); // false
MapUtils.isNotEmpty(null); // false
getString
MapUtils.getString(map, "str"); // あいう
MapUtils.getString(emptyMap, "str"); // null
MapUtils.getString(null, "str"); // null
MapUtils.getString(map, "int"); // 123
int を取得しようとすると自動的に String にキャストされます。
getString(デフォルト有り)
MapUtils.getString(map, "str", "default"); // あいう
MapUtils.getString(emptyMap, "str", "default"); // default
MapUtils.getString(null, "str", "default"); // default
MapUtils.getString(map, "int", "default"); // 123
null の場合、デフォルトに設定した値(3 番目の引数)が返却される。
getInteger
MapUtils.getInteger(map, "int"); // 123
MapUtils.getInteger(emptyMap, "int"); // null
MapUtils.getInteger(null, "int"); // null
MapUtils.getInteger(map, "str"); // null
String を取得しようとすると int へのキャストができず null が返却されます。(4 つ目)
ちなみにキー str に数値文字列が入っている場合は int にキャストされます。
getInteger(デフォルト有り)
MapUtils.getInteger(map, "int", 999); // 123
MapUtils.getInteger(emptyMap, "int", 999); // 999
MapUtils.getInteger(null, "int", 999); // 999
MapUtils.getInteger(map, "str", 999); // 999
null の場合、デフォルトに設定した値(3 番目の引数)が返却される。
getBoolean
MapUtils.getBoolean(map, "bool"); // true
MapUtils.getBoolean(emptyMap, "bool"); // null
MapUtils.getBoolean(null, "bool"); // null
MapUtils.getBoolean(map, "str"); // false
MapUtils.getBoolean(map, "int"); // true
String を取得した場合 false になります。
int を取得した場合、取得した数値によって結果が変わります。
- 0 以外 → true
- 0 → false
getBoolean(デフォルト有り)
MapUtils.getBoolean(map, "bool", true); // true
MapUtils.getBoolean(emptyMap, "bool", true); // true
MapUtils.getBoolean(null, "bool", true); // true
MapUtils.getBoolean(map, "str", true); // false
MapUtils.getBoolean(map, "int", true); // true
null の場合、デフォルトに設定した値(3 番目の引数)が返却される。
コメント